Wenn ich einen HDC erstelle und da rein eine HBITMAP wähle, ohne dabei ein Fenster zu erstellen, etwa so:
wie lösche ich den Kram dann wieder?
Ich weiss nur 2 Dinge:
1) DeleteObject() funktioniert nicht, solange das Objekt in einem HDC ausgewählt ist.
2) Wenn ich im case WM_PAINT eines Fensters sowas mache:
dann kann DeleteDC() offensichtlich die ausgewählte HBITMAP mit löschen, aber MyBitmap muss ich immer noch separat löschen.
In kurz: Wie räume ich das auf, ohne Fenster, ohne WM_PAINT, und ohne Leaks?
Code:
HDC ScreenDC = GetDC(0);
HDC hdc = CreateCompatibleDC(ScreenDC);
HBITMAP MyBitmap = (HBITMAP)LoadImage(0,"MyImage.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(hdc,MyBitmap);
wie lösche ich den Kram dann wieder?
Ich weiss nur 2 Dinge:
1) DeleteObject() funktioniert nicht, solange das Objekt in einem HDC ausgewählt ist.
2) Wenn ich im case WM_PAINT eines Fensters sowas mache:
Code:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd,&ps);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP MyBitmap = CreateCompatibleBitmap(hdc,100,20);
HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem,MyBitmap);
...
SelectObject(hdcMem,hbmOld);
DeleteDC(hdcMem);
DeleteObject(MyBitmap);
EndPaint(hWnd,&ps);
dann kann DeleteDC() offensichtlich die ausgewählte HBITMAP mit löschen, aber MyBitmap muss ich immer noch separat löschen.
In kurz: Wie räume ich das auf, ohne Fenster, ohne WM_PAINT, und ohne Leaks?