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 :

Question de couleur


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut Question de couleur
    Bonjour,
    Encore après avoir cherché des messages sur le forum, je n'ai trouvé que des renvois à la FAQ. Seulement, il semble que tout le monde créé ses fenêtres et ses contrôles "à la dure", alors que je ne fais "que" les dessiner (sans MFC ni quoi que ce soit) avec l'éditeur de ressource incorporé à VC++ 6.
    Je ne fais pas de C++, et le code qui est dans la FAQ fait mention de classes et compagnie, que je n'utilise pas ou alors sans le savoir.En d'autres termes, ce que je vois dans la FAQ m'est totalement incompréhensible (pour ce que je cherche en tout cas).
    Mes questions sont donc les suivantes :

    1)Comment puis-je changer la couleur du texte dans une listbox?
    2)Même question pour le background (tant qu'à faire)
    3)Changer la couleur de fond de ma DialogBox

    A savoir que :

    J'utilise comme vous l'aurez compris non pas une HWND créée de toute pièce mais une DialogBox qui fait office de fenêtre principale.
    Cette DialogBox est créée par CreateDialog() (of course).
    Tout ce que j'appelle Contrôle (pardonnez-moi si je me trompe) sont des boutons et des Edit/Listboxes crées par la suite dans l'éditeur de ressources, et je leur adjoins à tous un HWND par le biais d'un GetDlgItem.

    D'avance merci!

  2. #2
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Regarde du coté des messages suivants:

    WM_CTLCOLOREDIT
    WM_CTLCOLORSTATIC
    WM_CTLCOLORDLG

    Sinon, il faut faire une list-box Owner-Draw et dessiner le texte à la mimine (c'est pas si compliqué que ça).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Merci, je vais voir ça!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Eh bien c'est super tout ça!
    Dans le DlgProc de ma fenêtre principale, il suffit de faire dans le switch(uMsg) un case WM_CTLCOLORLISTBOX et les autres, puis de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		DeleteObject(hBrush);
    		hBrush=CreateSolidBrush(GRIS1);
    		SetTextColor((HDC)wParam,NOIR);
    		SetBkColor((HDC)wParam,GRIS1);
    		return (int) hBrush;
    avec

    et les couleurs GRIS et compagnie définies en tant que COLORREF, de structure 0x00BBVVRR pour BB, VV et RR variant entre 00 et FF.

    Merci, 10_GOTO_10!

    Encore une question : tu ne sais pas comment faire en sorte que la coloration du texte de la listbox ne se fasse que sur une seule ligne? Parce que là, c'est tout le texte qui varie, et mon but est de faire comme dans mIRC, des lignes de couleurs différentes...
    D'avance, merci!

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Attention: Je pense que tu devrais faire ton CreateSolidBrush dans le INITDIALOG et l'enregistrer, car si tu en fais un à chaque fois que tu reçois le message, il va être leaké, non?

    Citation Envoyé par MSDN
    The system does not automatically destroy the returned brush. It is the application's responsibility to destroy the brush when it is no longer needed.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Par défaut
    Leaké? Heum... Je ne connais pas ce mot!
    En fait, à chaque réception de ce message, j'opère un DeleteObject(), donc ça devrait éviter les boulettes, non?

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Ben, non. Il n'y a aucun endroit où le DeleteObject() pourrait fonctionner sans mémoriser le HBRUSH d'une exécution à l'autre.
    (Si tu ne crées qu'une seule fenêtre de ce type, une simple variable static suffit, sinon, il faut utiliser des méthodes plus complexes).


    Et si tu mémorises le HBRUSH, il devient inutile de le créer et le détruire à chaque fois: Tu le crées dans le INITDIALOG et tu le détruis dans le DESTROY, et le tour est joué...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/11/2010, 20h34
  2. Question de débutant sur la couleur
    Par oliver_mpt dans le forum DirectX
    Réponses: 4
    Dernier message: 01/03/2010, 08h20
  3. Question sur les couleurs et la SFML
    Par deubelte dans le forum SFML
    Réponses: 0
    Dernier message: 26/12/2009, 22h27
  4. Réponses: 6
    Dernier message: 20/07/2007, 19h59
  5. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45

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