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 :

Comment changer la couleur d'une combobox ?


Sujet :

MFC

  1. #1
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut Comment changer la couleur d'une combobox ?
    Bonjour à tous,

    En ce qui concerne la gestion des couleurs des contrôles, je suis novice...

    Je cherche à créer une combobox ayant un statut de lecture seule comme celui des champs de saisie.

    Pour cela, il faut que j'arrive à donner dynamiquement à ma combobox de type droplist la même couleur de fonds que celle des champs d'édition lorsqu'il sont en lecture seule. J'ai bien regardé dans la FAQ, mais je n'ai pas tout compris...

    Je précise quand même que je ne veux pas désactiver la combobox car je veux que la liste puisse être déroulée...

    Quelqu'un peut-il m'aider ?

  2. #2
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Personne n'a d'idée à me donner ?

    Mon problème peut se décomposer en 2 sous problèmes :

    1. changer la couleur de la combobox.
    J'ai réussi à changer la couleur de la liste quand elle est déroulée, en redéfinissant la méthode OnCtlColor. Mais le problème c'est que ça ne change pas la couleur de ma combobox quand elle n'est pas déroulée.

    2. récupérer la couleur correspondant à celle d'un champ EDIT en lecture seule.

  3. #3
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Je n'y parviens vraiment pas ! Il faut dire que la gestion des couleurs dans les MFC me semble assez compliquée, et je crois que ça l'est encore plus sur une combobox...
    Votre aide me serait d'un grand 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 as essayé de subclasser l'edit ?
    http://c.developpez.com/faq/vc/?page...CComboBoxCEdit

  5. #5
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Bonjour Farscape,

    Etant donné que dans le cas qui m'intéresse il s'agit d'une combobox de type dropdownlist, il n'y a pas d'edit... Dans le cas d'une dropdown, je reconnais que ça marche très facilement en subclassant l'edit et en le mettant en lecture seule...

  6. #6
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Je n'ai pas tout essayé car je suis sûr que c'est possible, mais j'ai essayé beaucoup de choses qui n'ont rien donné. Je serais vraiment soulagé d'avoir la technique qui me permettrait de réussir !

  7. #7
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Youpi, j'ai réussi !
    A force d'obstination, j'ai enfin trouvé le moyen de parvenir à mes fins.

    La solution est de redéfinir la méthode CtlColor. Dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    afx_msg HBRUSH CtlColor(CDC *pDC, UINT /*nCtlColor*/);
    Dans le .cpp :
    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
    BEGIN_MESSAGE_MAP(CMaCombo, CComboBox)
    	ON_WM_CTLCOLOR_REFLECT()
    	...
    END_MESSAGE_MAP()
     
    HBRUSH CMaCombo::CtlColor(CDC *pDC, UINT /*nCtlColor*/)
    {
    	// Réglage de la couleur de fond en fonction du mode d'accès.
    	if (IsWindowEnabled() && !m_lectureSeule)
    	{
    		pDC->SetBkColor(GetSysColor(COLOR_WINDOW));
    		return GetSysColorBrush(COLOR_WINDOW);
    	}
    	else
    	{
    		pDC->SetBkColor(GetSysColor(COLOR_BTNFACE));
    		return GetSysColorBrush(COLOR_BTNFACE);
    	}
    }
    où m_lectureSeule est l'attribut de type bool qui me permet de savoir si ma combobox est en lecture seule ou non.

    A force d'essayer toutes les couleurs avec la méthode GetSysColor, j'ai trouvé que COLOR_WINDOW correspondait à la couleur standart du fond de la combobox quand elle est active (ou celle de l'edit), et COLOR_BTNFACE à celle de la combobox quand elle est inactive (ou celle de l'edit).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment changer la couleur d'une courbe?
    Par DVD-RW dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/06/2007, 16h39
  2. Réponses: 7
    Dernier message: 13/11/2006, 12h12
  3. Comment changer la couleur d'une Led
    Par vantoff dans le forum C++Builder
    Réponses: 6
    Dernier message: 11/07/2006, 12h21
  4. Réponses: 7
    Dernier message: 28/06/2005, 11h53

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