Schon wieder: Probleme mit HBITMAP... =(
-
Hallo,
ich will mit meinem Programm Bitmaps laden, aber soweit komme ich erst gar nicht: Ich schaffe es nichtmal, eine Bitmap darzustellen. Ich hab dasselbe Prinzip schonmal in nem älteren Projekt verwendet, aber auf einmal funktioniert es nicht mehr, und ich kann den Fehler einfach nicht finden:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HDC DCmem, DCview; static HBITMAP Bitmap; switch (message) { case WM_INITDIALOG: DCmem = CreateCompatibleDC (GetDC (HWND_DESKTOP)); Bitmap = CreateCompatibleBitmap (GetDC (HWND_DESKTOP), 100, 100); SelectObject (DCmem, Bitmap); return 0; case WM_PAINT: Ellipse (DCmem, 10, 10, 90, 90); DCview = GetDC (hwnd); BitBlt (DCview, 0, 0, 100, 100, DCmem, 0, 0, SRCCOPY); ReleaseDC (hwnd, DCview); return 0 ; case WM_KEYDOWN: return 0; case WM_DESTROY: DeleteDC (DCmem); PostQuitMessage(0); return 0; } return DefWindowProc (hwnd, message, wParam, lParam) ; }Ich hab halt zwei DCs, auf den einen male ich nen Kreis, aber der BitBlt bringt es nicht raus, ich kann beim besten Willen keinen Kreis sehen, wenn ich direkt in DCview male klappt es... Bitte helft mir...
mfG D1B
-
Versuch mal mit BeginPaint und Endpaint zu arbeiten. Du vergisst übrigens in WM_DESTROY das Bitmap zu zerstören (sollte aber natürlich nicht die Ursache deines Problems sein).
-
Mich würd mal interessieren was du stattdessen siehst. Deine Bitmap, welche du in DCmem selektierst, ist ja quasi nicht initialisiert: Die könnte schwarz sein oder aber auch buntes Kuddelmuddel drin sein...
-
Das is ja eben das Problem, es wird gar nichts geblittet. Selbst wenn ich vorher DCmem mit BLACKNESS geblittet haette. Mit Begin- und EndPaint funktionierts auch nich...
Ich will also foldendes: Die Datei "bla.bmp" soll bei WM_INITDIALOG in den DCmem geladen werden, sodass ich diesen dann bei WM_CREATE in mein Window blitten kann. Wie koennte das dann aussehen, wenn Bilder und Fenster die Aufloesung 400x300 haben???
Ich schaffs einfach nich mehr, einen DC dazwischenzuschalten, direkt auf DCview kann ich mittels Ellipse, Rectangle etc. problemlos rumarbeiten, was aber mach ich mit den Bitmaps falsch???mfG D1B
-
Bekommt man bei Dialogen überhaupt ein WM_PAINT

Falls es kein Dialog ist solltest du aus WM_INITDIALOG (wird dann nämlich gar nicht gesendet) mal WM_CREATE machen
-
Muss man nicht erstmal ein Farbstift und die Hintergrundtransparenz festlegen bevor man loszeichnet.... ???
-
Naja, standardmäßig ist nen schwarzer Stift im DC. Problem wäre wenn die Bitmap selber schwarz wäre...
-
Muss am INITDIALOG liegen...schmeiß es in WM_CREATE...Namensgebung wäre auch unpraktisch wenns ein Dialog wäre, nicht WndProc sondern DlgProc
