Dialog verschieben
-
Hallo.
Ich habe mir mit
::FindWindowein Handel auf einen Dialog geholt.
Der Dialog gehört nicht zu meinem Programm.
Nun will ich diesen Diloag verschieben.
Dazu habe ich versuche mit::MoveWindow ::SetWindowPosunternommen.
Leider ihne Erfolg.
Nach MoveWindow hatte ich zum testen:GetWindowRectaufgerufen. Da stand im RECT die Psoition drin, auf der der Dialog verschoben werden sollte. Auf meinem Bildschirn tat sich aber nichts.
Weiß jemand, wie ich den Dialog verschieben kann?
Oli_1977
-
Mit MoveWindow oder SetWindowPos

-
Versucht habe ich es mit beidem, aber nicht gleichzeitig.
Oli_1977
-
Martin Richter schrieb:
Mit MoveWindow oder SetWindowPos

Warum beides!
-
Ich habe einmal so
::MoveWindow(hWnd,800,800,100,100,TRUE)probiert
und einmal mit SetWindowPos. Dazu habe ich haber den Quellcode nicht mehr.
Ich hatte es mit beidem probiert, weil ich keinen Erfolg hatte.
Zum testen habe ich auch einmal mit::GetWindowRect(hWnd,&rect)die Koordinaten nach einer Verschiebung von Hand ausgelesen. Es sind dann immer noch die, die ich über MoveWindow gesetzt habe.
Weißt Du oder jemand anderst irgend ein Rat?Oli_1977
-
Wenn MoveWindow in dieser Form nicht geht, dann stimmt das Handle nicht.
-
Ja sicher geht es mit diesen Funktionen.
Check doch erst mal ob das Handle überhaupt gültig ist.
-
Ich kann aber mit
ShowWindow(hWnd,SW_RESTORE);den Diloag in den Vordergrund bringen.
Ich habe folgenden Code um das Fenster in den Vordergrund zu bringen
hWnd = ::FindWindow(TEXT("TApplication"),TEXT("smartision ScreenCopy")); if(hWnd){ ::SetForegroundWindow(hWnd); ::ShowWindow(hWnd,SW_RESTORE); RECT rect; ::GetWindowRect(hWnd,&rect); }Also sollte das Handle stimmen.
hWnd wird mit NULL initialisiert.Oli_1977
-
Return code von MoveWindow?
-
Abfrage
BOOL erg = ::MoveWindow(hWnd,800,800,100,100,TRUE);ergibt 1.
Oli_1977
-
kA dann verfrickelst du irgendwo was, zeig mal ein Minimalbeispiel.
-
Jo!
hWnd ist wahrscheinlich 0!Lass dir anzeigen was GetLastError zurückgibt.
-
Kurzes Code Beispiel
Wnd = NULL; hWnd = ::FindWindow(TEXT("TApplication"),TEXT("smartision ScreenCopy")); if(hWnd){ ::SetForegroundWindow(hWnd); ::ShowWindow(hWnd,SW_SHOW); RECT rect; ::GetWindowRect(hWnd,&rect); ::SetWindowPos(hWnd,HWND_TOPMOST,200,200,0,0,SWP_NOSIZE); e = GetLastError(); }else{ ShellExecute(NULL,_T("open"),PFAD_BILDSCHRIRM_FOTOGRAFIEREN,_T(""),_T("C:\\Program Files\\ScreenCopy\\"),SW_SHOW | SW_SHOWNORMAL ); hWnd = ::FindWindow(TEXT("TApplication"),TEXT("smartision ScreenCopy")); if (hWnd) { RECT rect; ::GetWindowRect(hWnd,&ttt); DWORD e; BOOL erg = ::SetWindowPos(hWnd,HWND_TOPMOST,200,200,0,0,SWP_NOSIZE);//::MoveWindow(hWnd,200,200,500,500,FALSE); e = GetLastError(); ::GetWindowRect(hWnd,&rect); } }Rückgabewert von GetLastError ist 0.
Oli_1977