Bonjour,

Le fond de ma boîte de dialogue est défini comme ceci dans le constructeur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
m_colBckd=RGB(150, 150, 150);
m_hBackGroundDlg = CreateSolidBrush(m_colBckd);

puis j'ai ma fonction :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
	if(pWnd == this)
	{
		pDC->SetBkMode(TRANSPARENT);
		return m_hBackGroundDlg;
	}
 
	return hbr;
}
Voilà, ça marche bien SAUF les contrôles inactifs de type boutons radio, checkbox, slide...) où la couleur de fond est blanche!!!!!!!!!!!!!!!!!



Après des heures et des heures à essayer de faire qqch d'intelligent, j'ai craqué pour ce genre de c.... :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int a;
		int b;
		HDC myhdc = this->GetDC()->m_hDC;
		COLORREF clrrefwhite = RGB(255, 255, 255);
		COLORREF cref;
 
		for(a=3; a<181; a++)
		{
			for (b=5; b<46; b++)
			{
				cref = GetPixel(myhdc, a, b);
				if(cref==clrrefwhite)
					SetPixel(myhdc, a, b, m_colBckd);
			}
		}
Même d'une part c'est lourdingue, d'autre part ça ne marche pas dans OnInitDialog (mais ça marche ensuite, par exemple à l'action d'un bouton), et enfin, lorsque la boîte est redessinée, ça redevient comme avant (fond blanc sur les contrôles inactifs donc).