Bonjour,
Il se trouve que je dispose d'une boîte de dialogue constituée uniquement d'une view, sur laquelle s'affiche un skin (CBitmap m_skin) durant OnPaint() selon :
L'affichage marche correctement, mais quand je rajoute un CTransparentHoverButton, les zones transparentes du bitmap (rendu possible grâce à l'utilisation de CDC::TransparentBlt(), voir ci-dessous) laissent non pas apparaître le bitmap, mais la view (en dessous). J'aimerais savoir pourquoi ?
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void CPlayTyleDlg::OnPaint() { if (IsIconic()) { //... } else { CPaintDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap *oldBitmap = memDC.SelectObject(&m_skin); CSize skinSize = m_skin.GetBitmapDimension(); dc.BitBlt(0,0,skinSize.cx, skinSize.cy, &memDC, 0, 0, SRCCOPY); memDC.SelectObject(oldBitmap); } }
Voici la méthode d'affichage des boutons :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void CHoverButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC *mydc=CDC::FromHandle(lpDrawItemStruct->hDC); CDC memDC; memDC.CreateCompatibleDC(mydc); CBitmap * pOldBitmap; pOldBitmap = memDC.SelectObject(&mybitmap); CPoint point(0,0); //Exemple de blit, avec CSize m_ButtonSize, COLORREF m_crTransparent : mydc->TransparentBlt(0,0,m_ButtonSize.cx,m_ButtonSize.cy,memDC,m_ButtonSize.cx*2,0,m_ButtonSize.cx, m_ButtonSize.cy, m_crTransparent); // clean up memDC.SelectObject(pOldBitmap); }
C'est vraiment gênant pour moi, et je n'arrive pas à résoudre ce problème... sauriez-vous y remédier ?
Merci d'avance.
P.S: Le bouton est créé avec le style BS_OWNERDRAW.
Partager