Frage
-
Hallo,
ich habe ein Problem bei dem Code.
Und zwar erscheint nach dem zweiten mal mausdrücken nicht "Das erscheint nicht ;-("
Meiner meinung müste das erscheinen. Hat jemand einen Rad?
Könnte vieleicht jemand den Code überarbeiten.
Bedanke mich für Antworten
Code:
// 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 angebenwndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt
wndClass.hInstance = hInstance; // AnwendungsinstanzwndClass.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 LogoRegisterClassEx(&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;
}
-
print "Hör auf uns zu ver*****en"
-
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.