(erledigt) Problem mit WM_PAINT und LoadImage()
-
Meine Bitmap test.bmp habe ich auf 1*1 Pixel verkleinert, aber auch das hat nicht geholfen, folgendes Problem zu lösen:
In der WM_PAINT hole ich mir mit GetClientRect die Fenstergrösse und versuche dann, mit LoadImage() meine test.bmp zum Hintergrund des Fensters zu machen, und strecke sie dabei innerhalb von LoadImage() auf die Fenstergrösse. Unglücklicherweise wird nicht der gesamte Hintergrund meines Fensters gefüllt, sondern nur eine unvollständige Pixelzeile am unteren bzw. linken Fensterrand, je nachdem wo sich mein Mauscursor gerade NICHT befindet. Ich nehme an, das hat damit zu tun, das sich der Inhalt von rect.bottom, top, left und right noch durch Mausbewegung ändern kann, während die Bitmap gezeichnet wird? Wie kann ich hier Abhilfe schaffen? (P.S. NEIN, ich will KEINEN einfarbigen Hintergrund, sondern später eine grössere Bitmap verwenden. Die Bitmap habe ich nur zu Testzwecken auf 1*1 Pixel geschrumpft!)
Wenn ich anstelle von "breite" und hoehe" fixwerte nehme, funktionierts.Hier der Code, hat jemand eine Idee?
case WM_PAINT: { hdc = BeginPaint( hwnd, &ps ); // draw the following stuff: RECT rect; GetClientRect(hwnd, &rect); // Fenstergrösse herausfinden, um in LoadImage einzufügen int hoehe = rect.bottom - rect.top; int breite = rect.right - rect.left; HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, "test.bmp", IMAGE_BITMAP, breite, hoehe, LR_LOADFROMFILE); BITMAP bmp; GetObject(hBitmap,sizeof(bmp),&bmp); HDC hDC = GetDC(hwnd); HDC hBitmapDC = CreateCompatibleDC(hDC); SelectObject(hBitmapDC,hBitmap); BitBlt(hdc,0,0,bmp.bmHeight,bmp.bmWidth,hBitmapDC,0,0,SRCCOPY); // (hDC, Anfangsposix, AnfangsposiY DeleteObject(hBitmap); ReleaseDC(hwnd,hBitmapDC); ReleaseDC(hwnd,hDC); Bitmaphoehe = bmp.bmHeight; Bitmapbreite = bmp.bmWidth; if(hBitmap == NULL) { MessageBox(hwnd, "Could not load Bitmap!", "Error", MB_OK | MB_ICONEXCLAMATION); } Ellipse( hdc, 300, 100, 330, 130 ); // Ellipse: ( hdc, Anfangspunktx, Anfangspunkty, Endpunktx, Endpunkty) Ellipse( hdc, 160, 100, 190, 130 ); // Ellipse: ( hdc, Anfangspunktx, Anfangspunkty, Endpunktx, Endpunkty) Rectangle( hdc, 20, 90, 330, 100 ); // Rectangle: ( hdc, Anfangspunktx, Anfangspunkty, Endpunktx, Endpunkty) Rectangle( hdc, 220, 70, 300, 90 ); // Rectangle: ( hdc, Anfangspunktx, Anfangspunkty, Endpunktx, Endpunkty) EndPaint( hwnd, &ps ); break; }
-
Ich ziehe die Frage zurück, es ist spät und ich bin doof. ich muss natürlich BitBlt und nicht LoadImage beeinflussen -.-