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

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    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 295
    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 d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    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 295
    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 d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    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 295
    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