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 :

Gérer la couleur d'un CEdit


Sujet :

MFC

  1. #21
    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
    visual pemet l'utilisation d'une classe heritée ici CColorEdit si le .h est conforme a ce qu'il attend ,c'est a dire les macros dans le header ,dans la classe etc .. ,et si le classview est a jour ,ce qui n'est pas le cas pour une classe ecrite manuellement sans passer par la generation assistée de visual.
    c'est pas grave ,dans la combobox de selection de la classe tu tapes directement ta classe CColorEdit.

  2. #22
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    Ok, je vois,

    j'ai fais comme tu viens de me l'indiqué, j'ai donc déclarer sur un CEdit une variable de controle de mon type CColorEdit

    la classe :
    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
    #include "stdafx.h"
    #include "Digitick.h"
    #include "ColorEdit.h"
    #include ".\coloredit.h"
     
    // CColorEdit
     
    IMPLEMENT_DYNAMIC(CColorEdit, CEdit)
    CColorEdit::CColorEdit()
    {
    	m_pBrushReadOnly=NULL;
    }
     
    CColorEdit::~CColorEdit()
    {
    	delete m_pBrushReadOnly;
    }
     
     
    BEGIN_MESSAGE_MAP(CColorEdit, CEdit)
    	ON_WM_CTLCOLOR()
    END_MESSAGE_MAP()
     
     
     
    // CColorEdit message handlers
     
     
    HBRUSH CColorEdit::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if((GetStyle() & ES_READONLY))
        {  
            if(!m_pBrushReadOnly) m_pBrushReadOnly = new CBrush(RGB(255,255,255));
            pDC->SetBkColor(RGB(255,255,255));
            return (HBRUSH)m_pBrushReadOnly->GetSafeHandle();
        }
    	return NULL;
    }
    la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CColorEdit m_eColorEdit;
    dans le DoDataExchange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DDX_Control(pDX, IDC_EDIT2, m_eColorEdit);
    Seulement, c'est sensé mettre en blanc le controle s'il est en lecture seule, mais ca fais rien, il est grisé,

    Faudrait pas mettre un UpdateData quelque part ? mais ou alors ?

  3. #23
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    je relance ce post qui me bloque actuellement,

    j'ai reellement besoin de colorer ce composant.

    merci

  4. #24
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    me serais je trompé dans la déclaration ?



    En posant un point d'arret dans OnCtlColor, je vois elle n'est jamais lancée

  5. #25
    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,
    modifie la classe template comme suit:
    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
     
    //---------------------------------------------------------------------------------
    	virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
    	{
    		if(message==WM_CTLCOLOR)
    		{		
    			_AFX_CTLCOLOR* pCtl = (_AFX_CTLCOLOR*)lParam;
    			CDC dcTemp; dcTemp.m_hDC = pCtl->hDC;
    			CWnd wndTemp; wndTemp.m_hWnd = pCtl->hWnd;
    			UINT nCtlType = pCtl->nCtlType;
     
    			if(nCtlType==CTLCOLOR_STATIC)
    			{
    				char szClassName[30];
    				if(GetClassName(pCtl->hWnd,szClassName,sizeof(szClassName)))
    					if(strcmp(szClassName,"Static")) nCtlType=0;
    			}
    			if(nCtlType==CTLCOLOR_DLG || nCtlType==CTLCOLOR_STATIC)
    			{								
    				HBRUSH hbr = OnCtlColor(&dcTemp, &wndTemp, nCtlType);
    				// fast detach of temporary objects
    				dcTemp.m_hDC = NULL;
    				wndTemp.m_hWnd = NULL;	
    				*pResult = (LRESULT)hbr;
    				return TRUE;
    			}
    			// fast detach of temporary objects
    			dcTemp.m_hDC = NULL;
    			wndTemp.m_hWnd = NULL;	
    		}
    		return GENERIC_DLGCOLOR::OnWndMsg(message, wParam, lParam, pResult);
    	 }
    j'avais un probleme avec les messages reflect pour les controles .
    pour l'instant comme ça sa fonctionne je verrais plus tard quand j'aurais le temps a ameliorer la chose.

  6. #26
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    euh .... jla trouve ou cte classe ?

    j'ai essayer de la mettre directement dans ma classe CColorEdit, apparemment c'est pas la,

    j'ai plein d'erreur en le faisant

    [edit] quelle nouille, je vois c'est dans XTabCtrl je corrige !

  7. #27
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    je l'ai remplacé mais ca donne rien de plus, je rentre toujours pas dans CColorEdit::OnCtlColor

  8. #28
    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
    verifie que tu n'as les messages WM_CTCOLOR vide dans les onglets.
    fais aussi un UpdateData(TRUE) dans le OnInitDialog de la Dialog avec l'edit.

  9. #29
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut


    pas moyen de rentrer dedans malgrès le rajout de UpdateData(TRUE) dans DlValidationPage2::OnInitDialog() (d'ailleur, si ce n'est sa fonction de mise à jour, il sert à quoi dans ce cas précis ?)

    question : le fait que j'utilise de simples CDialog et non des CTplDlgColor<CDialog> dans le XTabCtrl, ca pourrait etre la source de ce probleme ?

  10. #30
    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
    tu rentres dans le constructeur de cette classe ?(ccoloredit)

  11. #31
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    oui

  12. #32
    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
    j'ai remis à jour mon projet avec un edit en mode read only ça fonctionne bien.
    http://farscape.developpez.com/Samples/CxTabCtrl.zip

  13. #33
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    bon, ben etant donné que je ne parviens toujours pas a coloriser ce que je veux (je veux a terme faire un CEdit dont la couleur sera modifiable)

    j'ai tenté de faire un projet vide qui ne ferait que ca, sans XTabCtrl ....

    ben jyarrive pas non plus, pas moyen de coloriser un CEdit.

    vois tu ou jme loupe en faisant ca :





    en rentrant :
    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
    #pragma once
     
     
    // CMyEdit
     
    class CMyEdit : public CEdit
    {
    	DECLARE_DYNAMIC(CMyEdit)
    	CBrush*   m_pBrushReadOnly;
     
    public:
    	CMyEdit();
    	virtual ~CMyEdit();
     
    protected:
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    };
    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
    // MyEdit.cpp : implementation file
    //
     
    #include "stdafx.h"
    #include "test_couleur.h"
    #include "MyEdit.h"
    #include ".\myedit.h"
     
     
    // CMyEdit
     
    IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
    CMyEdit::CMyEdit()
    {
    	m_pBrushReadOnly=NULL;
    }
     
    CMyEdit::~CMyEdit()
    {
    	delete m_pBrushReadOnly;
    }
     
     
    BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
    	ON_WM_CTLCOLOR()
    END_MESSAGE_MAP()
     
     
     
    // CMyEdit message handlers
     
     
    HBRUSH CMyEdit::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if(!m_pBrushReadOnly) m_pBrushReadOnly = new CBrush(RGB(255,255,0));
        pDC->SetBkColor(RGB(255,255,0));
        return (HBRUSH)m_pBrushReadOnly->GetSafeHandle();
     
    // TODO: Return a non-NULL brush if the parent's handler should not be called
    return NULL;
    }
    puis ajout d'une variable sur le CEdit



    et enfin en mettant UpdateData(TRUE); dans le OnInitDialog de la CDialog ?

    mon projet : http://firejocker.info/tmp/test_couleur.rar

    jdeviens fou la !

  14. #34
    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,
    Je viens de voir ton projet, tu fais quoi la ?
    Tu changes le fond systématiquement en blanc, c’est sur que vu comme ça tu ne verras rien vu qu'il n'y a rien a voir ...
    De plus tu te trompes de message pour un contrôle il faut utiliser les messages reflected:
    Première ligne du post duquel tu t'es inspiré:
    http://c.developpez.com/faq/vc/?page...#CEditCtlColor

    Ton projet modifié d'aprés un autre post de la faq:
    http://c.developpez.com/faq/vc/?page...s#SetColorCtrl

    http://farscape.developpez.com/Sampl...t_couleur.zip.


    vla ,

  15. #35
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    ben pas systematiquement en blanc : (255,255,0)

    je voulais mettre une couleur differente tout le temps justement,

    je file voir ton projet

    merci

  16. #36
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    je confirme que ton code fonctionne chez moi

    merci beaucoup.

    nb : jsais pas pourquoi mon code ne fonctionnait pas par contre

  17. #37
    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
    Citation Envoyé par firejocker
    je confirme que ton code fonctionne chez moi

    merci beaucoup.

    nb : jsais pas pourquoi mon code ne fonctionnait pas par contre
    tu n'utilisais pas le bon message ,cf mon post precedent .

  18. #38
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    soit !

    merci bien en tout cas !

  19. #39
    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
    pense a mettre resolu si c'est ok

  20. #40
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    desole, j'avais zappé ce coup ci


    merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [RegEx] Balises type BBCode pour gérer la couleur du texte
    Par Neuromancien2 dans le forum Langage
    Réponses: 3
    Dernier message: 06/09/2007, 22h43
  2. Modifier la couleur d'un CEdit!
    Par vonemya dans le forum MFC
    Réponses: 2
    Dernier message: 22/08/2007, 21h51
  3. Gérer les couleurs correctement ???
    Par ToTo13 dans le forum OpenGL
    Réponses: 7
    Dernier message: 09/05/2006, 18h39
  4. Pb changement de couleur d'un CEdit
    Par matth2602 dans le forum MFC
    Réponses: 5
    Dernier message: 04/01/2006, 17h18
  5. [JTable] Gérer la couleur de chaque ligne
    Par kerkennah dans le forum Composants
    Réponses: 2
    Dernier message: 27/05/2005, 11h56

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