bitmap auf knopfdruck zeichen lassen
-
ich wurede gerne wissen, wie man eine bitmap auf knopfdruck zeichen laesst(also ueber ein button), bei mir klappt das agnze nicht:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HANDLE hBitmap; static HWND hButton; switch(message) { case WM_CREATE: { hButton = CreateWindow("button", "aztec", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL); return 0; } case WM_SIZE: { MoveWindow(hButton, LOWORD(lParam) / 1.1 - 90, HIWORD(lParam) -550, 160, 22, TRUE); return 0; } case WM_COMMAND: { if(lParam == (LPARAM)hButton) { if(HIWORD(wParam) == BN_CLICKED) hBitmap = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); case WM_PAINT: { PAINTSTRUCT ps; HDC hDC; hDC = BeginPaint(hWnd, &ps); { HDC BhDC = CreateCompatibleDC(hDC); SelectObject(BhDC, hBitmap); BitBlt(hDC, 0, 0, 640, 480, BhDC, 0, 0, SRCCOPY); } EndPaint(hWnd, &ps); return 0; } } } case WM_DESTROY: { DeleteObject(hBitmap); PostQuitMessage(0); return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); }es passiert einfach nichts, wenn ich den button druecke!!
edit: sfds
-
Ist beim Kopieren des Codes etwas verlorengegangen oder fehlt da wirklich ein return bei WM_COMMAND?
-
ne, da fehlt kein return, noch in command case wird der paint case aufgerufen und zum schluss alles geschlossen
-
Dann isses kein Wunder das da nix passiert...

-
Deine switches bzw. case-Marken und ifs sind ja völlig wirr verschachtelt

Deine Vorgehensweise ist aber auch nicht so ganz richtig - WM_PAINT musst du immer bearbeiten und dort dann entsprechend unterscheiden, was gezeichnet werden soll (z.B. anhand einer static Variable, die du in WM_COMMAND setzt)

-
koenntet ihr euch ein bißchen genauer ausdruecken??
-
Okay, noch genauer!
Deine Aussage:
Moh schrieb:
ne, da fehlt kein return, noch in command case wird der paint case aufgerufen und zum schluss alles geschlossen
ist Blödsinn!
Nicht DU bestimmst, wann WM_PAINT abgearbeitet wird, sondern Windows... also halte Dich an die Regeln, die Windows Dir vorschreibt und gehe nicht einfach von Sachen aus, die nicht stimmen.Lade in WM_COMMAND das Bitmap (eine static variable wäre hier angebrachter), mache Dein Fenster mit InvalidateRect ungültig (DAS veranlaßt Windows dann, eine WM_PAINT an Dein Fenster zu schicken!) und pack ein return (inkl. schließende Klammer) dahin, wo es hingehört, wie Dir cd9000 bereits geschrieben hat...
-
thx, jetzt ist es mir klar, noch mal danke.