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 :

[MFC] CCheckListBox et colorisation des CButton


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Par défaut [MFC] CCheckListBox et colorisation des CButton
    Salut,

    A yeah, j'arrive à la fin de mon appli et je vous en remercie car c'est en partie grâce à vous!
    Néanmoins on veut toujours améliorer quelques trucs, surtout au niveau de l'ergonomie. Donc voila j'aurais deux questions :

    • J'aimerais remplacer ma CListbox par une CCheckListBox. Vu que cette derniere herite de la première ça me semblait élémentaire, mais quand je fais le changement au niveau de la déclaration
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      CCheckListBox myListBox; //remplace CListBox myListBox;
      le programme plante! Quelqu'un aurait-il déjà utilisé ce contrôle?


    • J'aimerais changer la couleur des textes de mes CButton. Pour cela j'ai implémenté le message WM_CTLCOLOR de ma dialog
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      HBRUSH Interface::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
      {
      	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
       
      	if( (nCtlColor==CTLCOLOR_BTN)) 
      	{ 
      		//pDC->SetBkColor( RGB(255,0,0) );     
      		pDC->SetTextColor( RGB(0,255,0) ); 
      	} 
       
      	return hbr;
      }
      Mais ça ne marche pas! Est-ce la bonne méthode?
    Merci.

    Toune

  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,
    pour la premiere question :indique sur quoi ça plante ( un peu de code) et l'assertion d'erreur.
    pour le deuxieme point il semblerait que ça ne fonctionne pas .
    moi j'opte pour un controle personnalisé .

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 7
    Par défaut
    Pour ce qui concerne les contrôles personnalisés dans mon cas je ne peux pas puisque le texte des boutons prend la valeur de ce que l'utilisateur rentre!

    En ce qui concerne les CCheckListBox, j'ai trouvé à l'instant en voulant t'expliquer l'erreur! Il fallait que je rajoute le style LBS_HASSTRINGS lors du create pour que ça marche.

    Merci.

  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,
    pour le buton je propose une classe simple qui simule le bouton de base.
    il suffit de remplacer la classe CButton par CButtonEx.
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    // le .h
    #if !defined(AFX_BUTTONEX_H__3259688A_1DF5_4CE4_9558_CC399AF94BA6__INCLUDED_)
    #define AFX_BUTTONEX_H__3259688A_1DF5_4CE4_9558_CC399AF94BA6__INCLUDED_
     
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // ButtonEx.h : header file
    //
    /////////////////////////////////////////////////////////////////////////////
    // CButtonEx window
    class CButtonEx : public CButton
    {
    // Construction
    public:
    	CButtonEx();
    // Attributes
    public:    
    // Operations
    public:
        // changement de couleur du texte du bouton dynamique si possible
        void SetTextColor(const COLORREF clrTextColor)
        {        
            m_clrTextColor=clrTextColor;
            if(m_hWnd) Invalidate();
        }    
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CButtonEx)
    	public:
    	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    	protected:
    	virtual void PreSubclassWindow();
    	//}}AFX_VIRTUAL
    // Implementation
    public:
    	virtual ~CButtonEx();
     
    	// Generated message map functions
    protected:
    	//{{AFX_MSG(CButtonEx)	
    	//}}AFX_MSG
     
    	DECLARE_MESSAGE_MAP()
    private :
        COLORREF m_clrTextColor;
    };
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    #endif // !defined(AFX_BUTTONEX_H__3259688A_1DF5_4CE4_9558_CC399AF94BA6__INCLUDED_)
     
    // le .cpp : ButtonEx.cpp
    /////////////////////////////////////////////////////////////////////////////
    // CButtonEx
    CButtonEx::CButtonEx()
    {
        m_clrTextColor=RGB(0,0,0); // noir
    }
    CButtonEx::~CButtonEx()
    {
    }
    BEGIN_MESSAGE_MAP(CButtonEx, CButton)
    	//{{AFX_MSG_MAP(CButtonEx)
    	ON_WM_DRAWITEM()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    /////////////////////////////////////////////////////////////////////////////
    // CButtonEx message handlers
    void CButtonEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
    	// TODO: Add your code to draw the specified item
        CDC dc;
        dc.Attach(lpDrawItemStruct->hDC);
     
        UINT uStyle = DFCS_BUTTONPUSH;
     
        ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
     
        if (lpDrawItemStruct->itemState & ODS_SELECTED) uStyle |= DFCS_PUSHED;
     
        dc.DrawFrameControl(&lpDrawItemStruct->rcItem,DFC_BUTTON, uStyle);
     
        // dession du texte.
        CString strText;
        GetWindowText(strText);
     
        COLORREF crOldColor = dc.SetTextColor(m_clrTextColor);
     
        dc.DrawText(strText, strText.GetLength(),&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
     
        dc.SetTextColor(crOldColor);
     
        CBrush blkBrush(RGB(0,0,0));
     
        // gestion du marquage du focus.
        if (lpDrawItemStruct->itemState & ODS_FOCUS)
        {
            CRect rct(&(lpDrawItemStruct->rcItem));
            dc.FrameRect(rct, &blkBrush);
     
            rct.InflateRect(-3,-3);
            dc.DrawFocusRect(rct);
        }
    }
    void CButtonEx::PreSubclassWindow() 
    {
    	// TODO: Add your specialized code here and/or call the base class
        ModifyStyle(0, BS_OWNERDRAW );	
    	CButton::PreSubclassWindow();
    }
    voila il suffit d'appeler la fonction SetTextColor pour fixer la couleur.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/08/2005, 15h08
  2. Réponses: 3
    Dernier message: 31/01/2005, 15h22
  3. [MFC]Pb de reception des messages!
    Par thief dans le forum MFC
    Réponses: 18
    Dernier message: 03/03/2004, 13h05
  4. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    Réponses: 3
    Dernier message: 18/02/2004, 16h04
  5. [MFC] Mise à jour dimension des CDialogBar
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 14/01/2004, 22h47

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