Saluts
Comment récupère t on la couleur de fond d'une fenetre et si possible l'avoir sous forme COLOREFF ?
Saluts
Comment récupère t on la couleur de fond d'une fenetre et si possible l'avoir sous forme COLOREFF ?
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
Est-ce que quelqu'un peut m'expliquer pourquoi
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.... }
Lire ce lien de la FAQ:Comment récupère t on la couleur de fond d'une fenetre et si possible l'avoir sous forme COLOREFF ?
Comment gérer la couleur de fond d'une fenêtre ?
ç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
et j'ai mis dans le constructeur le code que t'a marqué
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 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 ?
m_crBackColor ne doit pas être déclarée dans le constructueur mais définie/initialisée dans ce dernier.Envoyé par Minos2
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 ?
Ceci: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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CBrush *pOldBrush=DC_Ecran->SelectObject(&backBrush);
Je l'initialise comme suit dans mon fichier .h :
Code :
Je l'initialise tel que dans mon code ( en gras )
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() };
y a t il un erreur selon toi
![]()
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.
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.
Ouais mais si je met ce code dans OninitDialog() par exemple
SetBkGndColor(COLORREF clr);
avec
je met quoi dans dans clr ?
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(); }
Merci de penser à mettre la balise de code , Farscape
Ben la valeur RGB désirée, correspondant à la couleur de fond de ta fenêtre...Envoyé par Minos2
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 ?
salut,
voir l'api GetSysColor .
toutes les couleurs windows sont définies et récupérables par cette api.
COLOR_WINDOW: Window background.
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
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
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
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);
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
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Partager