Fehler bei bei WinAPI zu Anfang

UrsaMajor

Mitglied
Servus Jungs und Mädels brauche Eure hilfe.

Bekomme folgende Fehlermeldung:

C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ccOoeaaa.o(.text+0x1c9):apivor~1.cpp: undefined reference to `TextOutA@20'


So hier der Code.

Code:
 /* Windows Anwendungen API Vorlage */
 
 #include <windows.h>
 
 /* Vorwärtsdeklaration */
 
 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
 
 /* Globale Variablen vergabe */
 
 char szProgName[ ] = "Windows Programm mit API";
 
 /* Eintrittsfunktion, Argumente werden von Win an Fkt. übergeben */
 
 int APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
 {
 	HWND		hFenst; /* Fenster Handle */
 	MSG		mNachricht; /* Struktur für Nachrichten */
 	WNDCLASS	WinClass; /* Fensterklasse */
 
 /* Fensterklasse einrichten */
 
 memset (&WinClass, 0, sizeof (WNDCLASS));
 
 WinClass.style = CS_HREDRAW | CS_VREDRAW;
 WinClass.lpfnWndProc = WndProc;
 WinClass.hInstance = hInstance;
 WinClass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
 WinClass.hCursor = LoadCursor (NULL, IDC_ARROW);
 WinClass.lpszClassName = "Windows-Programm";
 
 /* Fensterklasse anmelden */
 
 if (!RegisterClass (&WinClass))
 	return (FALSE);
 
 /* Hauptfenster erstellen */
 
 hFenst = CreateWindow (szProgName, "API Anwendung", WS_OVERLAPPEDWINDOW, 10, 10, 400, 300, NULL, NULL, hInstance, NULL);
 
 /* Zeige Hauptfenster */
 
 ShowWindow (hFenst, iCmdShow);
 UpdateWindow (hFenst);
 
 /* Message Schleife */
 
 while (GetMessage (&mNachricht, NULL, 0, 0))
 	{
 	TranslateMessage (&mNachricht);
 	DispatchMessage (&mNachricht);
 	}
 /* Ende */
 
 return (mNachricht.wParam);
 }
 
 /* Fensterfunktion */
 
 LRESULT CALLBACK WndProc (HWND hWnd, UINT uiNachricht, WPARAM wParam, LPARAM lParam)
 {
 
 char str[30] = "Hier erfolgte Mausklick";
 HDC dc;
 
 /* beantworte Nachricht mit entspr. Aktion */
 
 	switch (uiNachricht)
 		{
 		case WM_LBUTTONDOWN:
 			dc = GetDC (hWnd); /* Gerätekontext anfordern */
 		    TextOut(dc, LOWORD (lParam), HIWORD (lParam), str, strlen(str));
 			ReleaseDC (hWnd, dc); /* Gerätekontext freigeben */
 			return 0;
 		case WM_DESTROY:
 			PostQuitMessage(0);
 			return 0;
 		default:
 			return DefWindowProc(hWnd, uiNachricht, wParam, lParam);
 		}
 }

Hmm, ich habe gerade erst angefagen das habe ich so in etwa aus einem buch. es soll in einem fenster anzeigen wo man mit der maus hingeklickt hat beim compilieren kommt obige meldung ich bin ratlos. Bevor das mit dem Mausanzeiger eingebaut hat sich nach dem compilieren auch nur die Console geöffnet und kein windows fenster!
 
moin


Guck mal nach ob die Gdi32.lib eingebunden wird.
Und bist du auch sicher das du als Projekt nicht "Konsolen Anwendung" eingestellt hast?!


mfg
umbrasaxum
 
moin


Das kann ich dir nicht sagen, da du nciht geschrieben hast welchen Compiler du benutzt.
Aber meist irgendwo bei den Projekt oder Compiler Einstellungen.


mfg
umbrasaxum
 
aso, ähm nutze den devc++ die neue beta version tja konsolen anwendung war eingestellt habe ich rausgenommen jetzt erscheint das fenster immer noch nicht aber im Taskmanager wird der Prozess des Fensters angezeigt. was tun?
 
UrsaMajor hat gesagt.:
Code:
 WinClass.lpszClassName = "Windows-Programm";
 
 /* Fensterklasse anmelden */
 
 if (!RegisterClass (&WinClass))
 	return (FALSE);
 
 /* Hauptfenster erstellen */
 
 hFenst = CreateWindow (szProgName, "API Anwendung", WS_OVERLAPPEDWINDOW, 10, 10, 400, 300, NULL, NULL, hInstance, NULL);


Bin mir jetzt nicht sicher aber das müsste es sein:

Parameter 1 von CreateWindow ist die Fensterklasse, die braucht Windows um bestimmen zu können wie das Fenster aussieht. Du regisrtrierst die Klasse deines Fensters auf den Namen "Windows-Programm" und gibst dann beim erstellen den Namen deines Progs als Klasse an. Gib da "Windows-Programm" an.
 
moin


Ja, der erste Parameter von CreateWindow muss gleich dem sein was man WNDCLASS als Klassenname gegeben hat.


mfg
umbrasaxum
 
Zurück