Probleme mit ShowWindow



  • Hallo, ich versuche gerade ein Programm zu schreiben, was u.a. gewisse Regionen vom Bildschirm aufzeichnet. In einem Dialogfenster drückt man auf Select und dann sollte sich das Parent-Fenster verstecken und ein Balken erscheinen, womit man den Ausschnitt markieren kann. Das Verstecken des Parent-Fensters ist auch mit ShowWindow(hwndParent, SW_HIDE) hinzubekommen. Problem ist bloss, dass es beim zweiten Aufruf des Popup Fensters (nach Wiederherstellen des Parent-Fensters mit ShowWindow(hwndParent, SW_SHOW)) nicht mehr klappt, d.h. das Parent-Fenster bleibt dann trotz Versteck-Anweisung sichtbar.

    Was hat sich also für dieses Fenster in Windows geändert? Habe dazu in der MSDN oder sonstwo nix gefunden.

    Wenn ich ein Sleep nach dem ShowWindow einbaue, funktioniert es scheinbar immer. Nur ist das eine scheussliche Lösung. Habe ich vlt was übersehen / wo könnte der Fehler sein?



  • Hier ist der Code zur entscheidenen Funktion. Ist aus einem MFC-Projekt, daher die CNewDialog Klasse. Sollte aber für das Problem keinen Unterschied machen.

    void CNewDialog::OnSelectButton() 
    {
        // UpdateValues() is a function to extract
        // the class member integers m_nRows and m_nColumns 
        // from the edit controls in the window
        UpdateValues();
    
        // should hide the window with handle m_hWnd
        ::ShowWindow(m_hWnd, SW_HIDE);
    
        // when this Sleep(...) command is removed, 
        // ShowWindow does not work properly anymore
        Sleep(50);
    
        // opens the popup window
        m_psrw->Select(m_nRows, m_nColumns);
    }
    


  • Oder gibt es eventuell eine gute Alternative zu der Sleep Anweisung, die sicherstellt, dass die ShowWindow Anweisung auch wirklich abgearbeitet wird? Leider hab ich auch dazu nichts hilfreiches in der MSDN gefunden.

    Edit: Oder gibt es einen Grund, warum *man* Parent-Fenster nicht versteckt? So eine Art WinAPI Folklore. Bin ratlos...



  • eckalb schrieb:

    Oder gibt es eventuell eine gute Alternative zu der Sleep Anweisung, die sicherstellt, dass die ShowWindow Anweisung auch wirklich abgearbeitet wird? Leider hab ich auch dazu nichts hilfreiches in der MSDN gefunden.

    Edit: Oder gibt es einen Grund, warum *man* Parent-Fenster nicht versteckt? So eine Art WinAPI Folklore. Bin ratlos...

    http://msdn.microsoft.com/en-us/library/ms633530(VS.85).aspx ?



  • -lowbyte- schrieb:

    http://msdn.microsoft.com/en-us/library/ms633530(VS.85).aspx ?

    Sieh an, diese Funktion behauptet offenbar, dass das Fenster nicht sichtbar ist, obwohl ich es doch sehen kann. Scheinbar wird die Nachricht WM_SHOWWINDOW verschickt, aber ohne das Sleep nicht verarbeitet, sehr merkwürdig das.

    Edit: Hilft mir aber leider nicht weiter. Wenn ich ShowWindow nochmals aufrufe, bringt das ja auch nichts.



  • Niemand dazu eine Idee? Ist das Problem zu einfach und ich nur zu doof oder zu schwierig? 😮


  • Mod

    Deine Sleep Anweisung garantiert nichts...
    Das Problem ist das Du nie weißt wann Deine Fensteranteile von anderen darunterliegenden Anwendungen überschrieben worden sind, vor allem verhinderst Du in Deiner Anwendung damit, dass sie sich neu zeichnet...



  • Martin Richter schrieb:

    Deine Sleep Anweisung garantiert nichts...

    Deswegen finde ich es ja auch ziemlich unelegant gelöst. Aber eine andere Variante hab ich auch nicht rausfinden können, die mir garantiert, dass der Status vor dem ersten Verstecken wiederhergestellt wird.


Anmelden zum Antworten