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 :
Voilà, ça marche bien SAUF les contrôles inactifs de type boutons radio, checkbox, slide...) où la couleur de fond est blanche!!!!!!!!!!!!!!!!!
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; }
Après des heures et des heures à essayer de faire qqch d'intelligent, j'ai craqué pour ce genre de c.... :
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).
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); } }
![]()
Partager