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