schließen eines fensters verhindern

rotodo

Grünschnabel
hallo leuts

Habe eine MDI-Anwendung am laufen mit einem ChildFrame. Außerdem besitzt mein Programm einen Timer, der gestartet werden kann und solange dieser Timer noch läuft darf das ChildFrame nicht geschlossen werden (also das X-Feld).
Wie stell ich das am besten an bzw. wie sprech ich das X-Feld an und wie kann ich es deaktivieren?

Danke
 
Zum einen kann man auf WM_CLOSE reagieren und dort einfach das Event NICHT an die Basis weitergeben, oder, etwas aufwendiger, den X-Button eingrauen.

Das geht über das Systemmenü des Windows, sieht in Win32 so aus:

HMENU hMenu = GetSystemMenu( m_hWnd, FALSE );
ModifyMenu( hMenu, SC_CLOSE, MF_BYCOMMAND | MF_DISABLED, 0, 0 );
SetWindowPos( m_hWnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME );

Das ModifyMenu erledigt im Prinzip schon alles, das X sieht aber erst gegraut aus, wenn man das Fenster bewegt. Das SetWindowPos erzwingt einfach ein Neu-Zeichnen des Fenster-Rahmens. Man kann dann auch über das Kontextmenü Close nicht mehr anwählen.
Mit MF_ENABLED wird der X-Button wieder benutzbar.

Dürfte kein Problem sein, das auf MFC umzubauen; andererseits kann man es ja auch direkt einsetzen, MFC und Win32 vertragen sich fast prächtig.
 
vielen Dank

Ich hab es über den ersten Weg probiert - funktioniert gut.
Vielleicht schau ich mir mal demnächst doch auch noch den komplizierteren Weg an...

Aber danke
 
Zurück