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 :
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);
	}
}
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 ?

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.