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 :

Couleur de fond d'un élément INACTIF


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut Couleur de fond d'un élément INACTIF
    Bonjour,

    Le fond de ma boîte de dialogue est défini comme ceci dans le constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m_colBckd=RGB(150, 150, 150);
    m_hBackGroundDlg = CreateSolidBrush(m_colBckd);

    puis j'ai ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
     
    	if(pWnd == this)
    	{
    		pDC->SetBkMode(TRANSPARENT);
    		return m_hBackGroundDlg;
    	}
     
    	return hbr;
    }
    Voilà, ça marche bien SAUF les contrôles inactifs de type boutons radio, checkbox, slide...) où la couleur de fond est blanche!!!!!!!!!!!!!!!!!



    Après des heures et des heures à essayer de faire qqch d'intelligent, j'ai craqué pour ce genre de c.... :
    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
    int a;
    		int b;
    		HDC myhdc = this->GetDC()->m_hDC;
    		COLORREF clrrefwhite = RGB(255, 255, 255);
    		COLORREF cref;
     
    		for(a=3; a<181; a++)
    		{
    			for (b=5; b<46; b++)
    			{
    				cref = GetPixel(myhdc, a, b);
    				if(cref==clrrefwhite)
    					SetPixel(myhdc, a, b, m_colBckd);
    			}
    		}
    Même d'une part c'est lourdingue, d'autre part ça ne marche pas dans OnInitDialog (mais ça marche ensuite, par exemple à l'action d'un bouton), et enfin, lorsque la boîte est redessinée, ça redevient comme avant (fond blanc sur les contrôles inactifs donc).


  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
    c'est les controles avec Enablewindow(FALSE) ? (ou propriete disable)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par farscape
    c'est les controles avec Enablewindow(FALSE) ? (ou propriete disable)
    Même résultat pour les conrôle mis en "Disable"=TRUE initialement dans la boîte, et ceux en propriété "Disable"=FALSE auxquel on donne l'instruction EnableWindow(FALSE);

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Résolu :

    en fait, il fallaut rajouter ceci pour chaque élément qui risque d'être inactif (pour les autres aussi si on veut, mais c'est pour ceux-là que c'est nécessaire) :

    Toujours dans OnCtlColor :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (pWnd==GetDlgItem(IDC_SLIDER1)) 
    {	
       pDC->SetBkMode(TRANSPARENT);
       return m_hBackGroundDlg;		
    }

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

Discussions similaires

  1. TDBGRID - Couleur de fond d'une seule cellule
    Par cgo dans le forum Bases de données
    Réponses: 5
    Dernier message: 11/09/2009, 10h16
  2. Réponses: 2
    Dernier message: 29/03/2007, 10h18
  3. debutant : couleur de fond d'une application direct3D
    Par ptidrone dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2004, 17h08
  4. Changer la couleur de fond de l'écran
    Par tnk dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 19/01/2003, 01h37

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