Archiv verlassen und diese Seite im Standarddesign anzeigen : Nachrichten-Schlange löschen
Matti
2003-06-16, 18:42:01
hab ein MFC-Dialogfeld-Projekt, und ich will nicht, daß es mit Escape beendet wird, weil Escape eine andere Funktion hat.
Also habe ich mir überlegt, daß ich die Nachrichten-Schlange löschen muß, was ich so gelöst habe:
LPMSG lpMsg;
while(PeekMessage(lpMsg,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE));
aber leider hängt sich das Prog dann auf.
stabilo_boss13
2003-06-16, 20:50:47
Original geschrieben von Matti
hab ein MFC-Dialogfeld-Projekt, und ich will nicht, daß es mit Escape beendet wird, weil Escape eine andere Funktion hat.
Also habe ich mir überlegt, daß ich die Nachrichten-Schlange löschen muß, was ich so gelöst habe:
LPMSG lpMsg;
while(PeekMessage(lpMsg,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE));
aber leider hängt sich das Prog dann auf.
Das muss so heissen:
while(PeekMessage(lpMsg,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE|PM_NOYIELD));
If no windows for this task need to be updated, GetMessage and PeekMessage yield control at this point, unless PeekMessage was called with the PM_NOYIELD option. This yield is done to prevent applications with fast timers (checked next) from hogging all the CPU time. (Remember, we are dealing with a nonpreemptive multitasking system.)
Quelle: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_getpeek.asp
Original geschrieben von Matti
hab ein MFC-Dialogfeld-Projekt, und ich will nicht, daß es mit Escape beendet wird, weil Escape eine andere Funktion hat.
Also habe ich mir überlegt, daß ich die Nachrichten-Schlange löschen muß, was ich so gelöst habe:
LPMSG lpMsg;
while(PeekMessage(lpMsg,NULL,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE));
aber leider hängt sich das Prog dann auf.
Hier (http://simplesamples.info/Keyboard/AcceleratingDialogs.asp) wird beschrieben wie du Accelerators nutzt um in MFC-Dialogen einer Taste eine spezielle Funktion (oder auch nichtstun) zuzuordnen.
Matti
2003-06-17, 10:31:41
@stabilo_boss
geht leider auch nicht. Also das Programm hängt sich nicht beim Leeren der Nachrichten-Schlange auf, sondern erst wenn die Funktion, in der die Schlange geleert wird, verlassen wird.
werd mir jetzt mal den Link von Xmas angucken...
EDIT:
Hab gerade eine andere Methode gefunden: man überschreibt CDialog :: OnCancel() durch eine eigene Funktion, in der das Fenster nicht geschlossen wird. Aber hier muß man aufpassen, weil man dann das Fenster auch nicht mit einem Click aufs X beenden kann. Man muß das Programm mit der Anweisung "EndDialog(0);" beenden.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.