Comment modifier le BackColor d'une DialogueBox?

Résolu
cs_coyote Messages postés 45 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 28 novembre 2008 - 11 nov. 2004 à 02:03
dnamboka Messages postés 2 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 26 février 2008 - 26 févr. 2008 à 16:54
Je developpe sous VC++ 6
Mon projet est de de type MFC Dialog Based.
Selon les clics utisateurs, differentes fenetres apparaissent ou disparaissent.

Mon probleme est que le fond des fenetres doit etre noir. J'ai bien fait un FillRect(..) avec remplissage noir mais lors de l'apparition d'une fenetre, un scintillement blanc de quelques millisecondes apparait avant la coloration en noir du fond. Ceci est du au rafraissiment de la fenetre par la couleur standard lors de l'appel de la methode Show(...);

Comment faire pour modifier la propriete BackColor d'une DialogueBox? (avec code exemple siouplait)

Merci infinnnniiiiment...

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 nov. 2004 à 11:48
en MFC:
Dans la classe de ta DialogBox:

ajouter une donnée HBRUSH m_hBackground à ta classe et la fonction
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)


HBRUSH CEditColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if(pWnd == this)
{
pDC->SetBkMode(TRANSPARENT);
return m_hBackGround;
}

return hbr;
}


et bien sur ajouter ON_WM_CTLCOLOR() dans la MESSAGE_MAP()
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
11 nov. 2004 à 09:31
Euh etant donné ke tu es en MFC, je sais pas si ca fonctionnera, mais voila kan mm :

//Tu crées un HBRUSH statik avec la couleur de ton choix
HBRUSH hbr = CreateSolidBrush(RBG(0, 128, 0));
//et a la reception du msg WM_CTLCOLORDLG, tu renvoie cette valeur
case WM_CTLCOLORDLG:
return (BOOL)hbr:

Et pis voila ! Bonne chance

++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
11 nov. 2004 à 12:00
ok dsl, j'etais carrement a la masse, dsl..

++
0
cs_coyote Messages postés 45 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 28 novembre 2008
12 nov. 2004 à 00:32
Parfait
Ca marche nickel.
MERCI BEAUCOUP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dnamboka Messages postés 2 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 15:35
Hello ça fais longtemps que ce post a été écrit...J'ai tenté de suivre les étapes. Tout ce passe bien sauf que j'ai une erreur de variable non déclarée (identificateur non non déclaré pour m_hBackGround. Alors pour information je l'ai simplement déclaré dans le .h  correspondant à la classe de ma dialogBox comme ceci : 

public:
    HBRUSH m_hBackground;

Est-ce suffisant ?
0
dnamboka Messages postés 2 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 26 février 2008
26 févr. 2008 à 16:54
Finallement en ajoutant dans la classe de ma DialogBox static devant HBRUSH m_hBackGround, ça passe. Mais je n'ai toujours pas de transparence ... J'ai plus d'erreur mais pas le résultat escompté :s

HBRUSH CTesterDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
static HBRUSH m_hBackGround;

if(pWnd == this)
{
pDC->SetBkMode(TRANSPARENT);
return m_hBackGround;
}
return hbr;
}
0
Rejoignez-nous