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 :

Colorier les controles d'une DLG


Sujet :

MFC

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Points : 22
    Points
    22
    Par défaut Colorier les controles d'une DLG
    Salut !!

    j'aimerai donner ceratines couleurs à différents controles d'une dialog box
    or je sais qu'on utilise la fonction SetDialogBkColor() pour colorier une DLG mais pour des controles donnés quels APIs utiliser??

    si quelqu'un a je pense, une réponse !!

    merci

  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
    Points : 17 323
    Points
    17 323

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    merci pour le lien

    mais en fait, (je n'ai pas été assez précis; décidemment ça devient une habitude!!) ce que je voulais c'était lors de l'affichage de la DLG (à l'init de la DLG) et non pas colorier en dynamique certains controles.

    est ce possible (ça me parait plus simple que le coloriage d'un controle) ?

    merci d'avance!

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    pas de couleurs en natif dans les controles voir faq:

    http://c.developpez.com/faq/vc/?page...s#SetColorCtrl

    le code qui suit est une modification non mise a jour dans la faq.
    (plus besoin de faire une classe derivée comme dans la faq) .

    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
     
    // include
    /////////////////////////////////////////////////////////////////////////////
    // Classe Template attributs couleurs 
    template <class GENERIC_CTRLCOLOR>
    class CTplCtrl : public GENERIC_CTRLCOLOR
    {
    // Construction
    public:
        CTplCtrl()
        {
            m_arClrCtlText[0]=::GetSysColor(COLOR_WINDOWTEXT); 
            m_arClrCtlText[1]=RGB(0  ,0  ,255); // LtBlue
            m_arClrCtlText[2]=RGB(128,0,0);    // Red.
            m_arClrCtlBkText[0]=::GetSysColor(COLOR_WINDOW); 
            m_arClrCtlBkText[1]=::GetSysColor(COLOR_WINDOW); 
            m_arClrCtlBkText[2]=::GetSysColor(COLOR_WINDOW); 
            for(int i=0;i<3;i++) 
            m_arHbrClrCtlBk[i]=::CreateSolidBrush(m_arClrCtlBkText[i]);
        }
     
       enum ModeColor
       {
        Normal,
        Disable,
        ReadOnly
       };
     
        void SetBkColor(COLORREF clrCtlBk = RGB(192, 192, 192), // couleur de fond
                        COLORREF clrCtlText = RGB(0, 0, 0),// couleur d'ecriture.
                        ModeColor eMode=Normal)// mode actif/Inactif/lecture seule.
        {
            m_arClrCtlText[eMode]=clrCtlText;
            m_arClrCtlBkText[eMode]=clrCtlBk;
            if(m_arHbrClrCtlBk[eMode])
                ::DeleteObject(m_arHbrClrCtlBk[eMode]); 
            m_arHbrClrCtlBk[eMode] = ::CreateSolidBrush(clrCtlBk);        
            if(m_hWnd) Invalidate();
        }
     
    // Attributes
    public:
     
        HBRUSH    m_arHbrClrCtlBk[3]; // brush de fond
        COLORREF  m_arClrCtlBkText[3];// couleur du fond.
        COLORREF  m_arClrCtlText[3];  // couleurs d'ecriture.  
     
    // Operations
    public:
     
        virtual ~CTplCtrl()
        {
            for(int i=0;i<3;i++) 
            if(m_arHbrClrCtlBk[i]) ::DeleteObject(m_arHbrClrCtlBk[i]);
        };
     
    	BOOL OnChildNotify(UINT message, WPARAM wParam,
                                   LPARAM lParam, LRESULT* pLResult)
       {
     
          HDC hdcChild = (HDC)wParam;
    	  CDC dc;
    	  dc.Attach(hdcChild);
          if(pLResult)
    	  {
    		*pLResult = (LRESULT)CtlColor(&dc, message);
    	  }
     
    	  dc.Detach();
     
          return TRUE;
       } 
        HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
        {
            bool bCEdit=(IsKindOf(RUNTIME_CLASS(CEdit))?true:false);
            HBRUSH hbr=NULL;
            ModeColor eMode=Normal;
            if(GetStyle() & ES_READONLY) eMode=ReadOnly;
            if(!IsWindowEnabled()) eMode=Disable;
     
            // TODO: Change any attributes of the DC here
            pDC->SetTextColor(m_arClrCtlText[eMode]);
     
            // Fixe le fond en transparent  pour le texte
            if(!bCEdit) pDC->SetBkMode(TRANSPARENT);
            else pDC->SetBkColor(m_arClrCtlBkText[eMode]);
     
            // retourne le handle de la brush pour le fond si il existe.
            if(m_arHbrClrCtlBk[eMode]) hbr = m_arHbrClrCtlBk[eMode]; 
     
            // TODO: Return a different brush if the default is not desired
            return hbr;
        }
    };
    utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //..........
    CTplCtrl<CEdit> m_EditCtrl;
    CTplCtrl<CStatic> m_StaticCtrl;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    je vais essayer !!

    et encore merci salut !!

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Points : 12
    Points
    12
    Par défaut griser une editbox
    Bonjour à tous,

    je cherche à griser une editbox suite à l'action de l'utilisateur :

    si je clique sur un bouton radio A --> griser mon editbox
    sinon la laisser read and write.

    Voici le code que g essayé, mais ca marche pas , l'editbox reste grisée même qd je clique sur un autre radioButton !!!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CEdit* hEdit = (CEdit*) GetDlgItem(IDC_MonEditBox);
        if (m_RadioA==0)
            m_PortConnex= hEdit->SetReadOnly(true);
            else 
                    m_PortConnex= hEdit->SetReadOnly(false);
    Help plz,

    merci d'avance.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 13
    Points : 12
    Points
    12
    Par défaut excuses tonycalv
    excuses je voulais poster mon message ds le forum mais comme je lisais ton problème et les solutions qu'on t'a apporté, ché pas g zappé

    au fait g un pbm de coloriage aussi, mais dans la fenêtre principale.
    J'affiche du texte dans la CMainFrame mais pas à partir de OnDraw ds la view mais plutôt un peu partout ds mes classes en pointant sur la vue biensûr .
    "au fait il s'agit d'un client ftp"
    et je cherche à afficher mes messages en couleur ( une ligne en couleur x et une autre en couleur y) " pour distinguer les réponses du serveur de celles du client.

  8. #8
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    pour la gestion des couleurs dans un edit il faut utiliser un CRicheditCtrl

Discussions similaires

  1. Colorier les bords d'une box
    Par cygvslince dans le forum Mise en forme
    Réponses: 2
    Dernier message: 07/03/2007, 21h26
  2. Accés direct à TOUS les controls d'une form
    Par olsimare dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/02/2007, 00h39
  3. [VB6] Colorier les lignes d'une listeview
    Par alliance dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 14/05/2006, 14h29
  4. [C#]Enumer les control d'une form ??
    Par djoao dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/03/2006, 12h28
  5. Réponses: 3
    Dernier message: 22/12/2005, 10h43

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