Lästiges cmd-Fenster
-
Hallo!
Ich erzeuge mit einem C-Programm unter Windows mit CreateWindowEx ein ganz normales Fenster. Leider wird beim Programmstart aber immer zusätzlich auch ein cmd-Fenster (eine DosBox) erzeugt, die ich aber nicht haben will. Wie kann ich verhindern, dass dieses schwarze Konsolenfenster erscheint?
Das blöde dabei: Sobald ich dieses Command-Fenster schließe, wir auch mein Programm beendet.Kann das am Compikler liegen? Ich verwende MinGW.
Das ist der Sourcecode des C-Programms:
//simple Window //compile-Befehl: C:\MinGW\bin\gcc simple.c -lgdi32 -o simple.exe #include <windows.h> // Prototyp meiner Callback-Funktion LRESULT CALLBACK MyWndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam); // Hier beginnts: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASSEX wc; LPCSTR lpszAppName = "AppName"; LPCSTR lpszTitle = "simple Window"; // Fensterklasse initialisieren wc.cbSize = sizeof(WNDCLASSEX); // Größe dieser Struktur wc.style = CS_HREDRAW | CS_VREDRAW; // Fenster neuzeichnen bei Größenänderung wc.lpfnWndProc = MyWndProc; // Callback-Funktion des Fensters (Default) wc.cbClsExtra = 0; // Extra-Speicher wc.cbWndExtra = 0; // Extra-Speicher wc.hInstance = hInstance; // Instanz-ID (wurde beim Aufruf des Programm vom Betriebssystem übergeben) wc.hCursor = LoadCursor(NULL,IDC_ARROW); // Cursor für dieses Fenster wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // Icon für dieses Fenster wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // weißer Hintergrund wc.lpszClassName = lpszAppName; // Name der FensterKlasse wc.lpszMenuName = lpszAppName; // Name der FensterKlasse wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Icon (links oben in Titelzeile) // Fensterklasse registrieren (Abbruch falls Registrierung fehlschlägt) if( RegisterClassEx(&wc) == 0) return 1; // Fenster erzeugen hWnd = CreateWindowEx( 0, // 0 = kein erweiterter Windows-Style lpszAppName, // Name der FensterKlasse lpszTitle, // Fenstertitel WS_OVERLAPPEDWINDOW, // Fenster-Style CW_USEDEFAULT, CW_USEDEFAULT, // Koordinaten der linke obere Ecke CW_USEDEFAULT, CW_USEDEFAULT, // Abmessungen des Fensters NULL, // Handle des Parent-Fensters: 0=kein Parent; (HWND_MESSAGE würde unsichtbares Fenster erzeugen) NULL, // Handle des Menüs hInstance, // Instanz zu der das Fenster gehört NULL); // Nachricht die beim Start verarbeitet werden soll // Abbruch bei Misslingen: if(hWnd == NULL) return 1; // Fenster anzeigen ShowWindow(hWnd, iCmdShow); // Fenster aktualisieren UpdateWindow(hWnd); // Tastatur-, Maus- und andere Ereignisse verarbeiten while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } //=================================================================== // Diese Funktion wird von Windows bei jeder Nachricht aufgerufen: //=================================================================== LRESULT CALLBACK MyWndProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam) { switch (umsg) { case WM_DESTROY: { // Das Fenster wurde geschlossen PostQuitMessage(0); // Aufforderung an das Programm sich zu beenden return 0; } } // Alle unbehandelten Events sollen von Windows behandelt werden return DefWindowProc(hWnd, umsg, wParam, lParam); }
Und mit diesem Befehl (den ich natürlich in einem cmd-Fenster absetze) habe ich das Ding compiliert:
C:\MinGW\bin\gcc simple.c -lgdi32 -o simple.exe
Danke für eure Hilfe!
Liebe Grüße
Hubert
-
Hi!
Dein Code ist ok, das liegt an deinen Compiler-Einstellungen. Weiteres kann ich dir dazu nicht sagen, weil ich den Compiler selbst nicht kenne.Gruß,
w.s.
-
Sag Deinem Linker er soll keine Conmsolen Anwednung erzeugen sondern ein Programm mit dem SUBSYSTEM:WINDOWS
-
Danke, Problem gelöst!
So funktionierts:
C:\MinGW\bin\gcc simple.c -lgdi32 -mwindows -o simple.exe
In einem anderen Forum (nämlich da: http://www.allegro.cc/forums/print-thread/594895)habe ich gelesen, dass -mwindows depreciated sei, und man stattdessen -Wl,-subsystem,windows verwenden soll. Wenn ich das mache bekomme ich aber eine Fehlermeldung.
-mwindows funktioniert aber tadellos, und das genügt mir.Nochmals Danke!
Liebe Grüße
Hubert
-
Sehr gut!
Weitermachen!