Entwickler-Ecke
Windows API - WINDOW Minimize/Maximize/Close reagieren
M. Raab - Mo 06.01.03 17:26
Titel: WINDOW Minimize/Maximize/Close reagieren
Hallo NG,
heute bin ich gleich mal 2x vertreten ... Hier mein 2. Problem:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function WinMain(hInstance : HINST; hPrevInstance : HINST; lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall; var msg : TMsg; appStart : DWord; begin Finished := False;
// Das Programm wird initialisiert (Fenster erstellen!) if not glCreateWnd(800, 600, FALSE, 32) then begin Result := 0; Exit; end;
appStart := GetTickCount(); // Die Zeit zum Programmstart nehmen
// Main message loop: |
Problem: wird auf Minimieren geklickt, ist das Fenster weg, ebenso bei Maximieren. Wie kann ich das verhindern und abfangen ? Wie kann ich eine Prozedur straten, wenn jemand auf Minimize klickt ? Die Tastaturereignisse kann ich mit der Funktion
Quelltext
1:
| function WndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; |
anfangen. Wie aber Minimize etc... Wie vrhindere ich, dass das Fenster ganz verschwindet sondern nur minimiert wird ?
Mein Fenster erstelle ich mit:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean; var wndClass : TWndClass; // Fenster Klasse dwStyle : DWORD; // Fenster Stil dwExStyle : DWORD; // Erweiterter Fenster Stil dmScreenSettings : DEVMODE; // Bildschirm Einstellungen (fullscreen, etc...) PixelFormat : GLuint; // OpenGL Einstellungen (Pixelformat) h_Instance : HINST; // aktuelle Instanz pfd : TPIXELFORMATDESCRIPTOR; // Einstellungen für das OpenGL Fenster begin h_Instance := GetModuleHandle(nil); // Instanz für's Fenster holen ZeroMemory(@wndClass, SizeOf(wndClass)); // Daten in wndClass löschen
with wndClass do // Setup der Fenster Klasse begin style := CS_HREDRAW or // Neuzeichenen wenn Fenster-Breite geändert CS_VREDRAW or // Neuzeichenen wenn Fenster-Höhe geändert CS_OWNDC; // Device Context exlusiv lpfnWndProc := @WndProc; // WndProc wird als Window Procedure gesetzt hInstance := h_Instance; hCursor := LoadCursor(0, IDC_ARROW); lpszClassName := 'TEST'; end;
if (RegisterClass(wndClass) = 0) then // Fenster Klasse registrieren begin MessageBox(0, 'Failed to register the window class!', 'Error', MB_OK or MB_ICONERROR); Result := False; Exit end; |
Gruss
Markus
Delete - Mo 06.01.03 18:53
Ausgehend von einem Beispiel, dass beim Klick auf Minimieren in die TNA umgeleitet wird, bin ich mit folgendem Code zum Ziel gekommen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| case uMsg of WM_SYSCOMMAND: case wParam of SC_MINIMIZE: begin // mach was end; // ansonsten Windows aktiv werden lassen else Result := DefWindowProc(hwnd,Msg,wParam,lParam); end; end; |
Beim Maximieren (SC_MAXIMIZE) ist´s IMHO genauso. Zum Thema schließen schlage ich SC_CLOSE bzw. die Nachricht WM_CLOSE vor; wobei ich persönlich Programme hasse, die sich nicht beenden lassen ...
< -- Edit ------------------>
Upps, "wParam"-Abfrage vergessen ... :oops:
M. Raab - Di 07.01.03 13:05
Hallo Mathias,
also: das ganze klappt ebenfalls. Trotzdem: wenn ich das Fenster minimiere, verschwindet es vollständig. Gibt es eine einfache Möglichkeit das Fenster als Balken stehen zu lassen ? Ich erzeuge in Delphi zur Laufzeit mehrere Fenster die alle sauber unten aufgeführt werden. Mein Ziel wäre nun: beim Minimieren dieses Fenster sauber einzureihen....
Oder muss man das minimierte Fenster komplett erzeugen (ähnlich Fullscreen) und dann unten positionieren ?
Gruss
Markus
Delete - Do 16.01.03 04:49
Das übernimmt in der Regel doch alles Windows. :shock: Oder ist das bei OpenGL anderst?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!