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] hériter CStatic


Sujet :

MFC

Vue hybride

r0d [MFC] hériter CStatic 21/04/2006, 10h10
farscape salut, m_hWnd c'est le... 21/04/2006, 10h17
r0d Que veux-tu dire par là? En... 21/04/2006, 10h38
farscape si tu relis la faq sur le... 21/04/2006, 10h49
r0d Il vient bien dans CtlColor... 21/04/2006, 11h13
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut [MFC] hériter CStatic
    Bonjour,

    alors voilà, j'ai utilisé cette faq pour créer un CStatic avec de la couleur. Et je viens de prendre conscience qu'il y a un truc que je n'ai pas compris dans la mfc, c'est cette histoire de m_hWnd.
    Pourquoi, dans ma classe héritée de CStatic (que j'ai appelé CColorStatic), mon m_hWnd est toujours NULL?
    Le truc c'est que je ne peux pas faire un ::Create(), car j'ai dessiné mon CStatic à la souris dans l'éditeur (je l'ai ensuite lié à une variable membre via DDX_Control).

  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,
    m_hWnd c'est le handle Win32 de la fenêtre .
    si il est null c'est que le subclass du contrôle par DodataExchange (par l'intermediaire du premier UpateData(FALSE)) n' est pas fait...

    donc tu travailles peut être avec la mauvaise variable...
    en bref y a un chisme quelque part...


  3. #3
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par farscape
    si il est null c'est que le subclass du contrôle par DodataExchange (par l'intermediaire du premier UpateData(FALSE)) n' est pas fait...
    Que veux-tu dire par là? En effet, je ne fais pas de UpdateData, mais où dois-je le mettre?
    Sinon, j'ai essayé un truc: dans le OnInitDialog de la fenêtre qui contient mon CColorStatic ( : public CStatic ) j'ai vu que si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaFenetre::OnInitDialog()
    {
    monStatic.SetBkColor();
    CDialog::OnInitDialog(RGB(255,0,0));
    }
    Là ça ne marche pas(m_hWnd = NULL)
    et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MaFenetre::OnInitDialog()
    {
    CDialog::OnInitDialog();
    monStatic.SetBkColor(RGB(255,0,0));
    }
    Là ça ne marche pas non plus (le CStatic garde la couleur par défaut, celle que j'ai choisi lors de la création dans la fenêtre de propriétés, soit un gris foncé vraiment très moche), mais le m_hWnd n'est plus NULL.

    Voilà ma fonction SetBkColor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void CColorStatic::SetBkColor(COLORREF clrCtlBk, COLORREF clrCtlText)
    {
        m_crTextClr = clrCtlText; 
        m_crTextBk = clrCtlBk; 
        m_hbrColorBk =    ::CreateSolidBrush(m_crTextBk);
     
        if(m_hWnd) Invalidate();
    }
    Il y a quelque chose qui cloche?


    Citation Envoyé par farscape
    donc tu travailles peut être avec la mauvaise variable...
    voyons, ce n'est pas mon genre...

  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
    si tu relis la faq sur le post UpdateData c'est expliqué :
    le premier UpdateData est fait sur OnInitDialog ou OnInitialUpdate de la classe de base .
    si ta colorisation ne fonctionne pas c'est que tu n'as pas intercepté le bon message .
    le message c'est =WM_CTLCOLOR le = voulant dire reflected...

  5. #5
    r0d
    r0d est actuellement connecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Il vient bien dans CtlColor quand je fais invalidate() ,mais la couleur du CStatic n'est pas modifiée. Pour tester, j'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)
    {
        m_crTextClr = RGB(255,255,255); 
        m_crTextBk = RGB(0,0,0); 
        m_hbrColorBk =    ::CreateSolidBrush(m_crTextBk);
     
        pDC->SetTextColor(m_crTextClr);
     
        return m_hbrColorBk;
    }
    et je fais un Invalidate à la fin du OnInitDialog de la fenêtre "propriétaire". Il passe bien dans CtlColor(), toutes mes valeurs sont ok, mais la couleur ne change pas. J'ai l'impression qu'il y a quelque chose qui m'échappe

  6. #6
    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
    hum ok rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pDC->SetBkMode(TRANSPARENT);

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

Discussions similaires

  1. [MFC] CStatic et couleur de fond
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 20/04/2006, 18h17
  2. [MFC] Un simple affichage d'image dans CStatic
    Par rabobsky dans le forum MFC
    Réponses: 2
    Dernier message: 02/03/2006, 12h28
  3. Réponses: 7
    Dernier message: 25/03/2005, 14h05
  4. [MFC] CStatic en gras
    Par hpfx dans le forum MFC
    Réponses: 8
    Dernier message: 12/01/2004, 14h10
  5. [MFC]arriere plan pour un objet de la classe CStatic
    Par gabriel knight dans le forum MFC
    Réponses: 13
    Dernier message: 28/07/2003, 10h42

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