Dialog verschieben


  • Mod

    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


  • Mod

    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.


  • Mod

    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


Anmelden zum Antworten