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 RGB d'1 fenêtre window


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut couleur de fond d'une fenetre
    Saluts
    Comment récupère t on la couleur de fond d'une fenetre et si possible l'avoir sous forme COLOREFF ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    J'ai ajouté ce code

    DC_Ecran->SetTextColor(Noir);
    COLORREF background;
    background = DC_Ecran->GetBkColor();
    DC_Ecran->SetBkColor(background);
    DC_Ecran->TextOut(-10,10,"0");

    je suis sous XP et la couleur de ma fenetre est standard. ( Gris très clair )
    mais j'ai pas le code.
    Je pensais récupéré la couleur de ma fenetre mais cela m'affiche bien le texte en noir mais le fond est blanc.
    Pourtant j'ai bien mis ce code dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void Edit_Gamma::OnPaint() 
    {
        CPaintDC dc(this); // device context for painting
     
        // TODO: Add your message handler code here
        CDC* DC_Ecran = GetDC();
     
    etc....
     
    }
    Est-ce que quelqu'un peut m'expliquer pourquoi

  3. #3
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Comment récupère t on la couleur de fond d'une fenetre et si possible l'avoir sous forme COLOREFF ?
    Lire ce lien de la FAQ:
    Comment gérer la couleur de fond d'une fenêtre ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    ça ne marche pas ou plutôt pas bien
    j'ai comme tu m'as dit utilisé l'exemple de la faq

    j'ai rajouté ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        CBrush backBrush(m_crBackColor);//COLORREF
        CBrush *pOldBrush=DC_Ecran->SelectObject(&backBrush);
        CRect rect;
        DC_Ecran->GetClipBox(&rect);
        //DC_Ecran->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);
        DC_Ecran->SelectObject(pOldBrush);
    et j'ai mis dans le constructeur le code que t'a marqué
    et déclaré m_crBackColor dans le constructeur.

    Je récupère pas la bonne couleur de fond.
    En effet je récupère un gris foncé dans m_crBackColor et cela me color ma fenêtre en gris foncé alors que ma fene^tre etait en gris clair
    Si je commente la ligne //DC_Ecran->PatBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);
    ma fenetre ne se color pas en gris foncé ce qui est normal
    si je rajoute DC_Ecran->SetBkColor(m_crBackColor );
    ma couleur de fond de texte est gris foncé alors que la couleur de fond de ma fenetre est gris clair.
    Cela ne va donc pas
    Note : DC_Ecran = GetDC() de ma fenetre

    T'as une explication ?

  5. #5
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par Minos2
    et déclaré m_crBackColor dans le constructeur.
    m_crBackColor ne doit pas être déclarée dans le constructueur mais définie/initialisée dans ce dernier.

    m_crBackColor est une donnée membre à déclarer dans ta classe, au niveau du fichier d'entête.

    Est ce que tu as quelque part initialisé m_crBackColor ?

    En effet je récupère un gris foncé dans m_crBackColor et cela me color ma fenêtre en gris foncé alors que ma fene^tre etait en gris clair
    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CBrush *pOldBrush=DC_Ecran->SelectObject(&backBrush);
    Permet de sélectionner un nouvel objet afin de modifier ta couleur de fond, d'ou l'importance d'initialiser m_crBackColor au préalable et retourne un pointeur sur ton précédent objet utilisé par l'application. Ainsi tu peux le restaurer.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    Je l'initialise comme suit dans mon fichier .h :

    Code :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    class Edit_Gamma : public CDialog
    {
    // Construction
    public:
        Edit_Gamma(int nIDMenu, CWnd* pParent = NULL);   // standard constructor
    
        void Trace_courbe(void);        // Tracé de la courbe
    {
        void Edit_Gamma::SetBkGndColor(COLORREF clr)
        {
            m_crBackColor=clr;
            if(::IsWindow(GetSafeHwnd())) Invalidate();
        }
        void Edit_Gamma::CalculPoint(FILE * f) ;    // Calcul des points
    
        int save_x;        // Abscisse x du graphe                    y     _______
        int save_y;        // ordonnée y du graphe                        |        |
        int save_x1;    // Abscisse x1 du graphe                y1    |_______|    
        int save_y1;    // Abscisse y1 du graphe                    x        x1
    
        bool Per_trace;    //    1er trace de courbe effectué
    
        COLORREF m_crBackColor;        // Couleur de fond de la fene^tre
    
        int m_nIDMenu; // la donnée membre dans la dialogue.
    
        BOOL Deja_Paint;    // On ne passe qu'une seule fois dans paint
    
    // Dialog Data
        //{{AFX_DATA(Edit_Gamma)
        enum { IDD = IDD_DIALOG_GAMMA };
        CSpinButtonCtrl    m_SpinGamma;
        CSliderCtrl    m_CtrlGamma;
        CString    m_StrValGamma;
        int        m_ValGamma;
        //}}AFX_DATA
    
    
    // Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(Edit_Gamma)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL
    
    // Implementation
    protected:
    
        // Generated message map functions
        //{{AFX_MSG(Edit_Gamma)
        afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
        virtual BOOL OnInitDialog();
        afx_msg void OnPaint();
        afx_msg void OnCustomdrawSliderGamma(NMHDR* pNMHDR, LRESULT* pResult);
        afx_msg void OnReleasedcaptureSliderGamma(NMHDR* pNMHDR, LRESULT* pResult);
        afx_msg void OnDeltaposSpinGamma(NMHDR* pNMHDR, LRESULT* pResult);
        afx_msg void OnSave();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };
    Je l'initialise tel que dans mon code ( en gras )
    y a t il un erreur selon toi

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut Couleur RGB d'1 fenêtre window
    slts

    Est ce que qq'un peut me donner la méthode pour trouver x,y,z de la fonction RGB(x,y,z) ( visual c++ v6 ) d'un fene^tre standard window ( gris très clair ). Paramètre par défaut d'1 fenetre sous Windows XP . en fait qd tu vas ss windows xp , que tu regarde les propriété d'affichage , onglet apparence, tu verras t'as un combo avec 2 choix :
    - Style Windows XP
    - Style Windows classique
    tu prend Windows XP, tu vois la tête de la fenetre "Boite de messages" , eh bien c'est cette couleur là que je veux connaître car j'ai besoin des valeurs x,y et z pour les traiter dans un programme en visual c++ ( MFC )
    GetBkColor ne fonctionne pas correctement
    Si qq'un peut me donner précisement ces valeur x,y et z se serait super.

  8. #8
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Tu l'initialiseras si t'appelles au moins une fois cette fonction au préalable. Dans OnInitDialog() par exemple.

    Sinon tu initialises m_crBackColor à une valeur RGB par défaut dans ton constructeur.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    Ouais mais si je met ce code dans OninitDialog() par exemple
    SetBkGndColor(COLORREF clr);

    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       void Edit_Gamma::SetBkGndColor(COLORREF clr)
        {
            m_crBackColor=clr;
            if(::IsWindow(GetSafeHwnd())) Invalidate();
        }
    je met quoi dans dans clr ?

    Merci de penser à mettre la balise de code , Farscape

  10. #10
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Citation Envoyé par Minos2
    je met quoi dans dans clr ?
    Ben la valeur RGB désirée, correspondant à la couleur de fond de ta fenêtre...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    Salut homeostasie

    Je te remercie de ta reponse mais justement je ne connait pas la valeur RGB de la fenetre que j'affiche et je n'ai pas envie de la forcer à une autre couleur.
    Par contre le Texte quand j'utilise TextOut() s'affiche en noir sur fond blanc alors que la fenêtre est gris clair.
    Or je ne connais pas le code RGB du gris clair ( Windows XP ).
    Il faudrait que je le connaisse pour le forcer avec SetBkColor(couleur RGB fond) pour que mon texte soit noir sur fond : couleur RGB fond de la fenetre.

    Est ce que tu connait ce code RGB ?
    Exemple fond Rouge : RGB = RGB(255,0,0)
    fond vert : RGB = RGB(0,255,0)
    fond Bleu : RGB = RGB(0,0,255)
    fond Cyan : RGB = RGB(0,255,255)
    etc...

    Bien sur tu peux avoir du rouge plus ou moins foncé par exemple.
    RGB = RGB (254,0,0)
    RGB = RGB (250,0,0)
    RGB = RGB (200,0,0)
    RGB = RGB (128,0,0)
    RGB = RGB (54,0,0)
    RGB = RGB (10,0,0)
    etc...

    Quel est le code RGB du gris clair des fenetre window XP?

    RGB = RGB(r,g,b) avec r = ? g = ? et b = ?

    Gris clair = αr + βg + γb

    Ou comment puis-je le connaitre ?

    Si quelqu'un a une idee ?

  12. #12
    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,
    voir l'api GetSysColor .
    toutes les couleurs windows sont définies et récupérables par cette api.
    COLOR_WINDOW: Window background.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    J'ai essayé ta fonction API farscape, elle me renvoi que la fenêtre est tte blanche alors qu'elle est grise clair, je ne comprend pas

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 143
    Par défaut
    Bon farscape j'ai pu resoudre enfin ce pb
    cela me plait pas beaucoup car c'est valable uniquement ss XP et encore avec les fenetre standards.

    Bref voila comment j'ai resolu mon pb :

    code :

    unsigned char i;
    for ( i = 192 ; i < 255 ; i++)
    {
    DC_Ecran->SetBkColor(RGB(i,i,i));
    DC_Ecran->TextOut(-10,10,"0000");
    CString str;
    str.Format("i = %u",i);
    AfxMessageBox((LPCTSTR)str);
    }

    J'affiche le texte et je clique sur OK jusqu'a tant de trouver le bon fond
    de texte.
    Qd c'est bon je relève la valeur de i
    Eh je trouve i = 228 ce qui est logique car blanc = RGB(255,255,255) et
    gris moyen = RGB (192,192,192)
    donc gris clair windows xp se situait entre les 2.

    RGB(228,228,228);

    Merci tout de meme pour ta collaboration et
    merci egalement au autre

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut
    Salut,

    Essayes de regarder du côté de la fonction GetSysColor.

    Moi je recup cette valeure via COLOR_WINDOW.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int x,y,z;
    COLORREF r;
    r=GetSysColor(COLOR_WINDOW); 
    x = RGB_GETRED(r);
    y = RGB_GETGREEN(r);
    z = RGB_GETBLUE(r);

  16. #16
    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
    le multi-post est interdit .
    de plus la même réponse a été faite à ce sujet...
    http://www.developpez.net/forums/sho...40#post2315340

Discussions similaires

  1. Liste des couleurs RGB?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 06/12/2005, 15h20
  2. Apparence des fenêtres Windows
    Par Jimy Neutron dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/08/2005, 10h19
  3. Réponses: 4
    Dernier message: 24/06/2005, 14h10
  4. Réponses: 1
    Dernier message: 26/02/2005, 12h55
  5. Style d'un fenêtre Windows
    Par Zazeglu dans le forum Windows
    Réponses: 4
    Dernier message: 12/10/2003, 18h19

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