IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Couleur de fond d'une boîte de dialogue.


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut Couleur de fond d'une boîte de dialogue.
    Bonjour,

    je travaille sur un projet avec des MFC.

    J'aimerais savoir coment on change la couleur de fond d'une boîte de dialogue.

    J'ai été voir dans la FAQ mais je ne comprends pas très bien ce qui est proposé.

    Merci.

    Atomikx

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    recuperes:
    http://farscape.developpez.com/Samples/SampleSDI.zip
    issu de mon tuto sur les MFC,il y a un exemple de boite de dialogue completement colorée.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    ca marche pas j'ai fais les modif dans le .h et j'ai ajouté la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void SearchDialogBox::SetDialogBkColor(COLORREF clrCtlBk /*= RGB(192, 192, 192)*/,
                                        COLORREF clrCtlText /*= RGB(0, 0, 0) */)
    {
        //m_HbrClrCtlBk est à null dans le constructeur 
        if(m_HbrClrCtlBk) ::DeleteObject(m_HbrClrCtlBk); 
        m_HbrClrCtlBk   = ::CreateSolidBrush(clrCtlBk);
        m_ClrCtlText    = clrCtlText; 
        m_crBackColor   = clrCtlBk;
        if(m_hWnd) Invalidate();
     }
    ensuite je l'appelle de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL searchDialogBox::OnInitDialog()
    {
    	CDHtmlDialog::OnInitDialog();
    	SetDialogBkColor(RGB(187,221,255));
    	return TRUE;  // retourne TRUE  sauf si vous avez défini le focus sur un contrôle
    }
    tout tompile bien mais je n'ai toujours pas de couleur dans ma boîte de dialogue......

    au secours

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    tu n'as pas bien regardé !
    il te manque la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HBRUSH CDlgAdvanced::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    à générer avec class Wizard message :WM_CTLCOLOR

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    ok, mais en fait ça me cause toujours un problème, en effet il ne met pas le fond de la fenêtre en bleu mais juste le fond ou il y a du texte.... je pense que je dois mal faire l'appel enfin je vois pas trop...

    tu as une idée?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    en fait je procède comme ceci.....mais je vois pas ou est l'erreur !!



    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    searchDialogBox::searchDialogBox(CWnd* pParent)
    	: CDHtmlDialog(searchDialogBox::IDD, searchDialogBox::IDH, pParent)
    {
    	// HBRUSH
    	m_HbrClrCtlBk=NULL ;
    	// COLOR
    	m_ClrCtlText= RGB(0, 0, 0) ; 
    }
     
    searchDialogBox::~searchDialogBox()
    {
    	if(m_HbrClrCtlBk) ::DeleteObject(m_HbrClrCtlBk); 
    }
     
    void searchDialogBox::SetDialogBkColor(COLORREF clrCtlBk /*= RGB(192, 192, 192)*/,
                                        COLORREF clrCtlText /*= RGB(0, 0, 0) */)
    {
        //m_HbrClrCtlBk est à null dans le constructeur 
        if(m_HbrClrCtlBk) ::DeleteObject(m_HbrClrCtlBk); 
        m_HbrClrCtlBk   = ::CreateSolidBrush(clrCtlBk);
        m_ClrCtlText    = clrCtlText; 
        m_crBackColor   = clrCtlBk;
        if(m_hWnd) Invalidate();
     }
     
     
     
    void searchDialogBox::DoDataExchange(CDataExchange* pDX)
    {
    	CDHtmlDialog::DoDataExchange(pDX);
    }
     
    BOOL searchDialogBox::OnInitDialog()
    {
    	CMainFrame* main_frm2 = (CMainFrame*) this->GetParent();
    	if (main_frm2->_bGoogle==true)
    	{
    		CComboBox* pComboBox=(CComboBox*)GetDlgItem(IDC_COMBO1);
    		pComboBox->AddString("le navigateur Google");
    	}
     
    	SetDialogBkColor(RGB(187,221,255));
     
    CDHtmlDialog::OnInitDialog();	
    	return TRUE;  // retourne TRUE  sauf si vous avez défini le focus sur un contrôle
    }
     
    BEGIN_MESSAGE_MAP(searchDialogBox, CDHtmlDialog)
    	ON_EN_CHANGE(IDC_EDIT1, OnEnChangeEdit1)
    	ON_CBN_SELCHANGE(IDC_COMBO1, OnCbnSelchangeCombo1)
    	ON_WM_CTLCOLOR()
    END_MESSAGE_MAP()
     
    BEGIN_DHTML_EVENT_MAP(searchDialogBox)
    	DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)
    	DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
    END_DHTML_EVENT_MAP()
     
     
    HBRUSH searchDialogBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     
        /*  CTLCOLOR_BTN button control 
            CTLCOLOR_DLG dialog box 
            CTLCOLOR_EDIT edit control
            CTLCOLOR_LISTBOX list box
            CTLCOLOR_MSGBOX message box 
            CTLCOLOR_SCROLLBAR scroll bar 
            CTLCOLOR_STATIC static text, frame, or rectangle 
        */
        // TODO: Change any attributes of the DC here 
        // par exemple en fonction de nCtlColor voir doc. 
     
        switch(nCtlColor)
        {
        // Intercepte le message pour es statics
        //case CTLCOLOR_DLG: deja traite dans OnEraseBkgnd
        case CTLCOLOR_STATIC : // Fixe la couleur d'ecriture du texte
            pDC->SetTextColor(m_ClrCtlText);
            // enventuellement suivant les cas 
            // pDC->SetBkColor(m_ClrCtlBk);
            // Fixe le fond en transparent pour le texte
            // à ne pas faire pour un edit. 
            pDC->SetBkMode(TRANSPARENT); 
            // retourne le handle de la brush pour le fond si il existe.
            if(m_HbrClrCtlBk ) hbr = m_HbrClrCtlBk;
            break; 
        }    // TODO: Return a different brush if the default is not desired	
    	return hbr;
    }

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    exact :
    deux solutions soit tu reactives dans OnCtlColor la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     //case CTLCOLOR_DLG: deja traite dans OnEraseBkgnd
    soit tu implementes comme dans mon exemple OnEraseBknd (WM_ERASEBKGND):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //----------------------------------------------------
    BOOL CDlgAdvanced::OnEraseBkgnd(CDC* pDC) 
    {
    	// TODO: Add your message handler code here and/or call default
       CBrush backBrush(m_crBackColor);//COLORREF 
       CBrush *pOldBrush=pDC->SelectObject(&backBrush); 
       CRect rect; 
       pDC->GetClipBox(&rect); 
       pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY); 
       pDC->SelectObject(pOldBrush);    
     
       return TRUE; 
    }

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    OK, je choisi la première solution, mais dans le case, je fixe la couleur comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pDC->SetBkColor(RGB(192,0,0));
    ou comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pDC->SetBkColor(m_ClrCtlBk);
    dans le premier ca compile mais ca ne marche pas et dans le 2ème il connait pas m_ClrCtlBk.....


  9. #9
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    pour la 2nde solution j'ai mis

    dans le message map

    ensuite j'ai mis la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BOOL searchDialogBox::OnEraseBkgnd(CDC* pDC) 
    {
    	// TODO: Add your message handler code here and/or call default
       CBrush backBrush(m_crBackColor);//COLORREF 
       CBrush *pOldBrush=pDC->SelectObject(&backBrush); 
       CRect rect; 
       pDC->GetClipBox(&rect); 
       pDC->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY); 
       pDC->SelectObject(pOldBrush);    
     
       return TRUE; 
    }
    dans searchDialogBox.cpp et sa déclaration dans le .h

    mais ca ne marche pas.......

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    le message est a rajouter avec classwizard : a la main on se trompe.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 92
    Par défaut
    j'utilise jamais le classwizard, comment fait on pour ajouter un message avec ??

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    en quoi vc6 ? 2003 ?
    voir post :
    http://www.developpez.net/forums/vie...255609#2255609
    sous vc6 : CTRL+W.
    sinon pour le post precedent il faut etre plus précis que "ça ne marche pas" .
    tu as mis un point d'arret dans la fonction ? tu y passes en trace debug?
    m_crBackColor est initialisé ? etc..


Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  2. changer la couleur de fond d'une dialogue
    Par PRUVOT dans le forum MFC
    Réponses: 1
    Dernier message: 27/10/2005, 11h50
  3. [MFC] afficher une boîte de dialogue
    Par bigboomshakala dans le forum MFC
    Réponses: 13
    Dernier message: 10/05/2004, 14h22
  4. [Kylix] Imprimer le contenu d'une boîte de dialogue
    Par cmp-france dans le forum EDI
    Réponses: 13
    Dernier message: 18/10/2003, 20h31
  5. Réponses: 3
    Dernier message: 29/08/2003, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo