Frage
-
Bitte nimm Code-Tags, so kann man das doch gar nicht gescheidt lesen!
cya
-
ich will ja nich so sein:
// Headerdatei #include <windows.h> //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); Test(); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = MessageHandler; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo RegisterClassEx(&wndClass); hWnd = CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Das Fenster", // Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 0, 0, 800, 600, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callbackfunktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachticht es sich handelt switch(msg) { // wenn das Fenster geschlossen wird, eine Nachricht senden, // die das Programm beendet case WM_DESTROY: PostQuitMessage(0); case WM_PAINT: PAINTSTRUCT ps; HDC hDC; hDC = BeginPaint(hWnd,&ps); SetTextColor(hDC,RGB(255,255,255)); SetBkMode(hDC, TRANSPARENT); // Der Anfang ------------------------------------------------------------------------------- TextOut(hDC,0,0,"Hallo",5); EndPaint(hWnd,&ps); break; ; case WM_LBUTTONDOWN: hDC=GetDC(hWnd); TextOut(hDC,0,160,"Hallo",5); ReleaseDC(hWnd,hDC); Test(); break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return (DefWindowProc(hwnd, msg, wParam, lParam)); } Test() { while(TRUE) { UINT msg; switch(msg) { case WM_LBUTTONDOWN: HDC hDC; hDC=GetDC(hWnd); TextOut(hDC,0,176,"Das erscheint nicht ;-(",23); ReleaseDC(hWnd,hDC); break; } } return 0; }
-
Original erstellt von Gott der 2.:
[cpp]
Test()
{
while(TRUE)
{
UINT msg; // msg ist nicht initialiesiert
switch(msg)
{
case WM_LBUTTONDOWN:
HDC hDC;
hDC=GetDC(hWnd);
TextOut(hDC,0,176,"Das erscheint nicht ;-(",23);
ReleaseDC(hWnd,hDC);
break;
}
}
return 0;
}[/cpp]
Du solltest msg als Parameter an Test() übergeben.
-
Und die Endlosschleife solltest du auch mal abbrechen.
-
Achso, hab ich schon erwähnt daß ich stockschwul bin?
-
*g*
-
Original erstellt von <Headhunter>:
Achso, hab ich schon erwähnt daß ich stockschwul bin?nein. :o
aber kannst du ja noch nachholen. :p
-
AN ALLE: ICH BIN STOCKSCHWUL!!!
:p
:o
-
Leg doch einfach in MessageHandle eine statische Variable an und erhöhe sie in WM_LBUTTONDOWN um 1. Und gibt dann, je nach dem, welchen Wert sie hat deinen Text aus
-
Ich will ein Textadventure erstellen, und weis einfach nicht wie ich die CallBack funktion machen soll.