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ührterror 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(...).