Problem mit ausgabe(Anfänger)
-
Also ich mache gerade das tutorial von Henno durch(www.win-api.de).
Nun wollte ich (bin bei Lektion 11) mal was selber schreiben. Leider klappt
es nicht.
Das Program soll mir eine zahl ausgeben die wenn man die linke Maus taste
drück um 1 erhöht wir. Das erste mal kommt 1 wenn man nochmal klickt passiert
nichts mehr.#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); const char szAppName[] = "Test"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName= szAppName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(szAppName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int zahl = 0; char text[100]; int lange; switch(message) { case WM_LBUTTONDOWN: { zahl++; lange = wsprintf(text, "%i", zahl); HDC hDC = GetDC(hWnd); TextOut(hDC, 50, 50, text, lange); ReleaseDC(hWnd, hDC); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }
-
Probiere mal statt:
HDC hDC = GetDC(hWnd); TextOut(hDC, 50, 50, text, lange); ReleaseDC(hWnd, hDC);das hier:
MessageBox (hWnd, lange, "Zahl", MB_ICONINFORMATION);Wenns klappt dann liegt es daran, dass der Text nicht richitg überschrieben wird, sondern einfach nur drunter gelegt wird.
Mfg Ominion
-
Also lange wollte ich nicht ausgeben und die zahl direkt klappt auch nicht(also einen int). Mit dem char bleibt es immer 1.

-
Mein Fehler. Ersetze lange durch text.
Mfg Ominion
-
Wenn ich das so mache:
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); const char szAppName[] = "Test"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL,IDC_ARROW); wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszClassName= szAppName; wc.lpszMenuName = NULL; RegisterClass(&wc); hWnd = CreateWindow(szAppName, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int zahl = 0; char text[100]; char text2[23]; int lange; switch(message) { case WM_LBUTTONDOWN: { zahl++; lange = wsprintf(text, "%i", zahl); MessageBox (hWnd, text, "Zahl", MB_ICONINFORMATION); zahl++; lange = wsprintf(text2, "%i", zahl); MessageBox (hWnd, text2, "Zahl", MB_ICONINFORMATION); /*HDC hDC = GetDC(hWnd); TextOut(hDC, 50, 50, text, lange); ReleaseDC(hWnd, hDC);*/ return 0; } case WM_LBUTTONUP: { return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }Klappt es inderekt also erste box eins die zweite 2. Allerdings bleiben sie dann auch so.
-
Mache text und text2 static und staune

Mfg Ominion
-
Danke jetzt klapps. Ich hab das jetzt mit static gemacht. Alerdings musste ich dann auch die int static machen.
Danke.
-
Es reicht wenn Du die "zahl" static machst... oder Du gibst dem Fenster eine Struktur mit, wo Du Fenster-Spezifische Dinge ablegst.
Siehe: Set/GetWindowLong(Ptr) mit GWLP_USERDATA
dann kannst Du auf static verzichten.