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.


Anmelden zum Antworten