MessageBox "Programm-Modal"?



  • Hallo

    Ich habe eine Dialoganwendung. Um Nachrichtentexte auszugeben habe ich eine eigene Klasse, die die Messages mittels einer MFC-MessageBox() anzeigt (Allgemeine Klasse, nix MFC)
    so etwas:

    void MessageHandler::printMessage(){
    
      AfxGetMainWnd()->GetForegroundWindow()->MessageBox("txt", "title", ICONTYPE);
    }
    

    Nun ist es so, dass wenn die Anwendung im Vordergrund läuft und eine Nachricht ausgegeben wird, so kann man NICHT in die Dlg-App klicken. Man MUSS zuerst die box wegklicken. Das ist gut so.

    Wenn aber die Dlg-App im Hintergrund, d.h. durch eine andere Anwendung verdeckt wird, so erscheint zwar die Msg-Box im Vordergrund, aber die App erscheint nicht im Vordergrund!
    Ich kann nun also ohne die Box wegzuklicken, die Dlg-App aufrufen ... DAS ist nicht gut.

    Wie kann ich den aktuellen Dlg-Fokus herausfinden? Mit oberem Codeschnippsel funktioniert es scheinbar nicht wirklich.

    Hier noch eine Darstellung der Dlgs, bei welcher die Box ausgelöst wird.

    + MainDlg
      - SubDlg ( mittels .DoModal() )
        - TabCtrl
          - TabSubDlg (hier wird 'printMessage()' ausgeführt)
    

    Danke für eure schnelle Hilfe!



  • Woran es liegt weiß ich leider nicht, aber ich würde mal testen, was passiert wenn du AfxMessageBox nutzt. 🙂



  • schon

    AfxGetMainWnd()->MessageBox("txt", "title", ICONTYPE);

    ausprobiert?



  • estartu_de schrieb:

    Woran es liegt weiß ich leider nicht, aber ich würde mal testen, was passiert wenn du AfxMessageBox nutzt. 🙂

    Mit 'AfxMessageBox()' kann man keine Titeltexte verwenden, daher fällt diese Methode weg.



  • loli schrieb:

    schon

    AfxGetMainWnd()->MessageBox("txt", "title", ICONTYPE);

    ausprobiert?

    erbringt leider auch nicht den gwünschten erfolg!



  • Probieren Sie folgendes aus:

    MessageBox ("Hello", "", ICONTYPE | MB_TOPMOST);

    Fredy



  • Fredy Kruger schrieb:

    Probieren Sie folgendes aus:

    MessageBox ("Hello", "", ICONTYPE | MB_TOPMOST);

    Fredy

    Danke für den Tipp, aber da MessageBox in eienr *nicht Dialogklasse* aufgerufen wird, benötige ich noch den Handle dazu. Da ich den aktuellen nicht kenne, geb ich halt NULL an.

    MessageBox (NULL, "Hello", "", ICONTYPE | MB_TOPMOST);
    

    Leider hilft auch das nicht! Ich muss zwingend den Dialoghandle ermitteln, der zur Zeit aktiv ist (Auch wenn die gesammte Dlg-Anwendung im Hintergrund ist).

    Neue Frage: WIE kann man den aktuellen CWnd ermitteln? Habe schon jenste befehle versucht (getActiveWindow(), getTopWindow() etc.) aber immer ohne Erfolg.



  • Aber immer konnen Sie benutzen :

    AfxGetMainWnd()->MessageBox ("Hello", "", ID_ICONTYPE | MB_TOPMOST);

    und dann brauchen Sie handle nicht mehr.

    Was bekommem Sie, wenn Sie GetActiveWindow rufen ?

    Fredy


Anmelden zum Antworten