Couleur de fond d'un élément INACTIF
Bonjour,
Le fond de ma boîte de dialogue est défini comme ceci dans le constructeur :
Code:
1 2 3
|
m_colBckd=RGB(150, 150, 150);
m_hBackGroundDlg = CreateSolidBrush(m_colBckd); |
puis j'ai ma fonction :
Code:
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:
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).
:help: