Problem mit SetWindowPos



  • Ich benutzte

    HWND hwnd = this->GetSafeHwnd(); // handle of DIALOG	
        RECT rc;
        this->GetWindowRect(&rc);
        //ClipOrCenterRectToMonitor(&rc, flags);
        this->SetWindowPos(hwnd, rc.left, rc.top, 0, 0,
    		SWP_NOSIZE | // Retains the current size (ignores the cx and cy parameters).
    		SWP_NOZORDER | // Retains the current Z order 
    		SWP_SHOWWINDOW | // Displays the window.
    		SWP_DRAWFRAME | // Draws a frame around the window.
    		SWP_NOCOPYBITS // Do NOT Save content
    		);
    

    innerhalb von

    void COutputDlg::OnRButtonDown (UINT nFlags, CPoint point)

    um zu Testen die Größe zu verändern.

    Leider scheitert das am Handle. Den Fehler verstehe ich jedoch nicht

    error C2664: 'CWnd::SetWindowPos': Konvertierung des Parameters 1 von 'HWND' in 'const CWnd *' nicht möglich
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    In der Doku
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/setwindowpos.asp
    wird SetWindowPos auch mit einem Parameter mehr beschrieben, der bei mir aber zu diesem Fehler führt

    error C2660: 'CWnd::SetWindowPos': Funktion akzeptiert keine 7 Argumente

    Matthias



  • Es gibt zwei Versionen der SetWindowPos(), wie bei vielen WinAPI-Funktionen.

    Die eine ist Member von CWnd und ändert die Position des this-Fensters - dort gibst du als ersten Parameter das CWnd an, hinter dem du landen willst (da du SWP_NOZORDER angegeben hast, kannst du dort NULL übergeben, andernfalls mußt du dir ein CWnd zu deinem Ziel-Handle geben lassen).
    Die zweite übernimmt als erste zwei Parameter das eigene Handle und das Handle des anvisierten Nachbarfensters - wenn du die wirklich brauchst, erreichst du sie über ::SetWindowPos(...).


Log in to reply