Windows Message abfangen

acidx

Grünschnabel
Hi zusammen!

Habe in einer Win32-Anwendung programmiert, dass beim Schließen des Fensters eine MEssageBox mit einem OK und einem Cancel Button erscheint.
Möchte allerdings nach Drücken von Cancel NICHT, dass das Fenster destroyt wird.
Dies wird aber standardmäßig getan. :-/

Wie kann ich also die WM_CLOSE-Nachricht kurzfristig aus der Schleife löschen, so dass das Fenster NICHT geschlossen wird

Ne FUnktion wie z.b. DestroyMessage(..) oder sowas gibt es leider auch nicht...
 
Du kannst sie in PreTranslateMessage abfangen, die MB anzeigen und je nach Reaktion die Nachricht weiterleiten oder verschwinden lassen.
 
sagt mal, weiß auch zufällig jemand, warum das "IntelliSense" beim VC++ (VS6) in manchen Projekten funktioniert und in manchen nicht?
 
Kommt leider immer mal vor, dass die IntelliSense-Datenbank ein Problem hat. Du kannst bei den betroffenen Projekten einfach mal die .ncb-Datei löschen. Beim nächsten Öffnen des Projektes wird die Datenbank neu erzeugt und IntelliSense sollte wieder funktionieren.

Gruß
MCoder
 
Die MessageBox gehört in den WM_CLOSE-Handler. Wenn du die MessageBox mit MB_YESNO aufrufst, bekommst du auch einen Antwortcode zurück. Den fragst du ab und gibst dann einfach return 0 zurück (um das Schließen abzubrechen) oder gibst die Nachricht an die DefWindowProc weiter wie gehabt.

Niemals einfach eine Nachricht rauszappen.

So sollte das aussehen:

Code:
switch ( message )
...
case WM_CLOSE:
  if ( MessageBox( hWnd, "Aufhören?", "In Echt?", MB_YESNO ) == IDNO )
  {
    return 0;
  }
  break;
}

return DefWindowProc( hWnd, message, wParam, lParam );
 
Ein echt tolles Forum, großes Lob an der Stelle!

Das "return 0" war die Lösung, eigentlich auch logisch.
Danke nochmal!!
 
Zurück