WinApi Fenster fragen
-
Hi
Ich benutze den Dev C++ IDE (Kompiler) und möchte ein Fenster erstellen. Ich habe den Quelltext von diesen Tutoriel: http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api2.htm
Hier der Quelltext:#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //Deklaration der Windows-Nachrichten-Prozedur int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) { char szName[] = "Fensterklasse"; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; // CS = "class style" wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hI; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szName; RegisterClass (&wc); HWND hwnd = CreateWindow (szName, "", WS_SYSMENU | WS_THICKFRAME, 0, 0, 200, 100, NULL, NULL, hI, NULL); ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); // Nachrichten-Schleife MSG msg; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } // Windows-Nachrichten-Prozedur LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (message) { case WM_PAINT: hdc = BeginPaint (hwnd, &ps); TextOut (hdc, 20, 20, "Ich bin ein Fenster.", 20); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam); }
Dabei erschein folgender Fehler: [Linker error] undefined reference to
GetStockObject@4' [Linker error] undefined reference to
TextOutA@20'
ld returned 1 exit statusHat jemand ne Idee was der Fehler ist oder kennt jemand ein besseres Tutoriel?
-
ist irgendeine library nicht drin, deshalb findet der linker die funktionen nicht.
der aufruf sollte so aussehen gcc -o name -mwindows datei.c
-
Also was genau muss ich jetzt ändern?
-
du musst in deinem compiler aufruf -mwindows hinzufügen
-
oh sorry hast ja ne ide, da musst du bei einem neuen projekt win32 fensteranwendung oder so wählen
-
Okay Danke klappt jetzt
-
Was genau macht eigentlich bei diesem Code
ShowWindow (hwnd, iCmdShow);
der Befehl iCmdShow.
-
den Parameter ist von der WinMain und sagt aus, wie dein Fenster dargestellt wird.
int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow)
-
Und wie stellt iCmdShow, dass Fenster da, weil es gibt ja auch noch
SW_NORMAL. Also was ist der Unterschied zwischen SW_NORMAL und iCmdShow?
-
iCmdShow ist Grundsätzlich SW_SHOWNORMAL.
Bei Verknüpfungen von Programmen kann man jedoch unter Eigenschaften das Programm minimiert und maximiert starten. Dann hat iCmdShow einen anderen Wert.
-
Okay Thx