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. 🙄 😉


Anmelden zum Antworten