Transparenter Hintergrund
-
Ich schreibe gerade einen Menubar Control. Wenn ich es auf einen Rebar platziere, muss der Hintergrund des Controls transparent sein wie z.B. ein Toolbar mit dem TBSTYLE_FLAT Style. Beim füllen der WNDCLASSEX Struktur habe ich den hbrBackground Member mit 0 initialisiert, allerdings bekomme ich einen Schmier-Effekt wie auf dem Screenshot zu sehen ist. Hat jemand eine Idee?
-
Vielleicht hilft WS_EX_TRANSPARENT
-
jo, hat geholfen
Allerdings habe ich ein weiteres Problem: Ich habe ein ownerdraw Menü und möchte double buffering implementieren. Ich habe versucht in WM_DRAWITEM ein offset DC zu erstellen allerdings sehe dann nur den ersten Item meines Menüs, der Rest ist schwarz. Hier nochmal ein screenshot: Link Falls es hilft, ich habe das Menü subclassed, so dass ich den Zugriff auf WM_PAINT, WM_ERASEBKGND habe.
-
Dann scheinst du beim Blitten etwas falsch zu machen
Klappt es denn, wenn du es auf diese Weise, nur eben ohne Double-Buffering, zeichnest?
-
sicher klappt es
-
Dann zeig doch mal ein bisschen Code
-
sorry, vergessen
//... HDC hDC = pDrawItem->hDC; RECT rcItem = pDrawItem->rcItem; UINT uState = pDrawItem->itemState; int cx = rcItem.right - rcItem.left, cy = rcItem.bottom - rcItem.top; HDC hMemDC = CreateCompatibleDC(hDC); HBITMAP hBitmap = CreateCompatibleBitmap(hDC,cx,cy); SelectObject(hMemDC,hBitmap); //... //Zeicheoperationen BitBlt(hDC,rcItem.left,rcItem.top,cx,cy,hMemDC,0,0,SRCCOPY); DeleteDC(hMemDC), DeleteObject(hBitmap);
-
Problem gelöst und zwar lag es daran, dass nachdem ich ein offscreen DC implementiert habe, die Zeichenoperationen im original RECT durchgeführt habe. Die x und y Koordinaten des offscreen DCs müssten bei 0 beginnen.