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]SetDialogBkColor


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Par défaut [MFC]SetDialogBkColor
    Salut!!

    voila j'utilise cette fonction ds mon "InitInstance()" de mon prog.

    ca marche y a pas de souci.

    maintenant j'aimerai savoir s'il est possible de faire la meme chose mais de facon dynamique. c'est à dire que si je clique sur un bouton ca change la couleur de fond ainsi que celle du texte.

    si kelk1 à une ptite idée ,voir un petit exemple, j suis preneur

    merci d'avance

  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 ce faire il faut implementer le message WM_CTLCOLOR sur la dialog
    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
     
    HBRUSH CTestsDiversDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     
    	// TODO: Change any attributes of the DC here
            // par exemple en fonction de nCtlColor voir doc.
            switch(nCtlColor)
    	{
    		case CTLCOLOR_DLG:
    		case CTLCOLOR_STATIC  :
    			// Set the text color to red.
    			pDC->SetTextColor(RGB(255, 0, 0));
    			// Set the background mode for text to transparent 
    			// so background will show thru.
    			pDC->SetBkMode(TRANSPARENT);
    			// Return handle to our CBrush object.
    			hbr = m_brush;
    	}
    	// TODO: Return a different brush if the default is not desired
    	return hbr;
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Par défaut
    salut!!

    desolé de ne pas avoir repondu avant mais je ne trouvais plus mon message.

    merci pour ta reponse qui marche a merveille.

    sauf que j'ai été obligé d'enlever le
    car je n'ai pas definie "m_brush" et je ne vois pas à koi il sert.

    si tu peux m'eclairé là dessus stp.

    sinon encore merci c'est tiptop ce que je voulais.


  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 content que ça te plaise
    en fait m_brush ça serait ta brush perso pour le fond de la dialog
    exemple
    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
     
    // ------------------------------------------------------
    void CTestsDiversDlg::InitBkSolidBrush(COLORREF BkColorRef)
    {
    // m_pBkBrush est à null dans le constructeur et ne pas oulier la sequence suivante  dans le destructeur
    	if(m_pBkBrush)
    	{
    		m_pBkBrush->DeleteObject();
    		delete m_pBkBrush;
    	}
    	m_pBkBrush = new CBrush;
    	m_pBkBrush->CreateSolidBrush(BkColorRef); 	
    }
    HBRUSH CTestsDiversDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
       HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     
       // TODO: Change any attributes of the DC here
            // par exemple en fonction de nCtlColor voir doc.
            switch(nCtlColor)
       {
          case CTLCOLOR_DLG:
          case CTLCOLOR_STATIC  :
             // Set the text color to red.
             pDC->SetTextColor(RGB(255, 0, 0));
             // Set the background mode for text to transparent
             // so background will show thru.
             pDC->SetBkMode(TRANSPARENT);
            // Return handle to our CBrush object.
           if(nCtlColor==CTLCOLOR_DLG && m_pBkBrush)                 hbr=(HBRUSH)m_pBkBrush->GetSafeHandle();
             break;
       }
       // TODO: Return a different brush if the default is not desired
     
       return hbr;
    }
    // utilisation 
    CTestsDiversDlg Dlg;
    Dlg.InitBkSolidBrush(RGB(0xFF, 0xFF, 0xE0));
    Dlg.DoModal();
    voila un joli fond

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Par défaut
    Resalut!!

    une petite question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pDC->SetBkColor(RGB(15,15,15));
    ca ne fonctionne pas si je le rajoute ds le premier bout de code que tu m'as donné.

    pourquoi??

    faut que je passe par le deuxieme bout de code que tu m'as fait voir pour modifier la couleur de fond???


  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
    en fait la brush dans mon exemple modifie uniquement le fond de la dialogue
    voir le test.
    si on l'enleve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           if(/*nCtlColor==CTLCOLOR_DLG &&*/ m_pBkBrush)                 hbr=(HBRUSH)m_pBkBrush->GetSafeHandle();
    cette fois ci les statics et la dialogue ont le meme fond......

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Par défaut
    ok merci je vais regarder tout ca de plus pres.

    encore merci


  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 54
    Par défaut
    Pour ceux que ca interresse

    y suffit juste de rajouter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hbr = ::CreateSolidBrush(RGB(255, 255, 255));
    ds le code que ma fournis "farscape"

    et j'ai bien la couleur de fond de mon static comme je veux.

    encore merci à farscape


  9. #9
    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,
    petit code grands effets ...
    si tu utilises ::createsolidbrush direct attention a liberer quand meme les objets
    par :eleteObject
    donc on peut tjrs utiliser ce que j'ai fait et tester le handle HBRUSH m_hbr
    si <> de null etc...

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

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