Dialog bei Click außerhalb des Dialogfensters schliessen



  • Ich habe folgendes Problem. Ich habe ein Fenster erzeugt und in dieses Fenster ein Button gesetzt. Drückt man auf diesen Knopf ploppt ein modaler Toolbar-Dialog auf. Ich möchte nun aber dass der Toolbar-Dialog sich schliesst sobald der Benutzer auf eine Stelle außerhalb des Toolbar-Dialogs clickt.

    Bisher habe ich in der DlgProc des Toolbar-Dialogs folgendes probiert:

    case WM_ACTIVATE:
      if (HIWORD(lParam) == WA_INACTIVE)
        EndDialog(hwndDlg, 0);		
        return 0;
    

    Das Ganze funktioniert gut, aber wenn man den Toolbar-Dialog geöffnet hat und dann auf das Hauptfenster drückt bekomme ich kein WM_ACTIVATE Ereignis.

    Ich habe alternativ gedacht dass man den Toolbar-Dialog nicht modal machen könnte, um dann bei speziellen Ereignissen in der WndProc des Hauptfenster den Toolbar-Dialog schliessen zu können. Das ist aber keine gute Lösung, weil man dann den Toolbar-Dialog an vielen potenziellen Stellen (Click auf Client Area/Nonclient area/Button) beenden muss.

    Hat jemand eine Idee wie man das alternativ lösen kann ?



  • Hallo,

    Bitte ein Bit schrieb:

    Das ist aber keine gute Lösung, weil [...]

    Doch, du könntest WM_KILLFOCUS behandeln.

    MfG,

    Probe-Nutzer



  • Danke für die schnelle Lösung ! Es funktioniert ! 🙂

    Das WM_KILLFOCUS Event wird aber nicht geschickt, wenn man auf den Button drückt, dabei den Toolbar-Dialog aufploppt und dann wiederrum auf den Button drückt. Aber das ist zu verschmerzen.

    Jetzt muss ich nur noch schauen wie ich den nicht-modalen Dialog durch Drücken der Escape schließen kann. Bisher habe ich die DialogBox Funktion verwendet welche sich anscheinend um die Behandlung der Escape Taste gekümmert hat. Nun benutze ich die CreateDialog Funktion und die Escape-Taste funktioniert nicht mehr! Interresant !

    Irgentwie habe ich das Gefühl dass ich die Behandlung von Nachrichten immer noch nicht ganz richtig verstanden habe! 😞 Aber mir machts Spaß herauszufinden wie es En Detail funktioniert. 😃



  • ich geh jetzt mal davon aus das du deinen Toolbar-Dialog gesubclass'd hast. das problem mit dem nichtsenden von speziellen nachrichten kommt mir nämlich bekannt vor. zumindest versteh ich dich jetzt soo...

    mein lösungsansatz dahingehend, SendMessage aus der Nachrichtenschleife des Hauptdialoges, mit der Nachricht die an die Subclassrotiene normal nicht gesendet wird.


Log in to reply