Memory DC schickt Bitmaps ins Nirvana
-
Da sowohl Petzold als auch die Online-Dokumentation von MSVC++ aus Memory DC ein Geheimnis machen, hier meine völlig idiotische Frage:
Warum gibt WM_PAINT nichts wieder? In WM_LBUTTONDOWN werden meine Rechtecke virtuell gezeichnet, gehen dann aber auf der langen Reise nach WM_PAINT verloren.case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
hdcMem= CreateCompatibleDC (hdc);
memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient);
SelectObject(hdcMem, memBM);
rechteck(hdcMem, cxClient, cyClient, sooft);
ReleaseDC(hWnd, hdc);
break;(...)
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
BitBlt(hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
break;Ich weiß, dass ich ganz bestimmt einen ganz groben Fehler begangen habe. Wurde aber aus Petzold & Co. kein bisschen schlauer.
-
Alexander Rahm schrieb:
case WM_LBUTTONDOWN: hdc=GetDC(hWnd); hdcMem= CreateCompatibleDC (hdc); memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient); SelectObject(hdcMem, memBM); rechteck(hdcMem, cxClient, cyClient, sooft); ReleaseDC(hWnd, hdc); break;probier mal so ähnlich...
case WM_LBUTTONDOWN: { static BOOL flag = FALSE; if (flag == FALSE) { flag = TRUE; hdc=GetDC(hWnd); hdcMem= CreateCompatibleDC (hdc); memBM=CreateCompatibleBitmap (hdc,cxClient,cyClient); SelectObject(hdcMem, memBM); ReleaseDC(hWnd, hdc); } rechteck(hdcMem, cxClient, cyClient, sooft); } break;
-
Ich glaube das Erstellen des Memory DCs gehört eher nach WM_SIZE.
-
glaube schrieb:
Ich glaube das Erstellen des Memory DCs gehört eher nach WM_SIZE.
wenn schon, dann zu WM_CREATE oder alles was man sonst noch als 'konstruktor' missbrauchen kann.
-
@net:
ändert nichts, Bitmap wird nicht ausgegeben.
-
Alexander Rahm schrieb:
@net:
ändert nichts, Bitmap wird nicht ausgegeben.na dann geh mit'm debugger rein und guck dir vor allem die rückgabewerte der createcompatibleBlah...-funktionen an