Problème avec les couleurs de la fonction BRUSH

Résolu
ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 - 8 oct. 2005 à 21:36
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 9 oct. 2005 à 10:00
Bonjour, voila j'ai une petit application (qui sert aps à grand chose
pour l'instant) où je change la couleur d'un rectangle en cliquant
dessus. Ca amrche tres bien en gris, blanc et gris foncé, mais je
voudrais le faire avec un code couleur RGB (red, green, blue). Je fais
une applivcation SDI avec visual studio .net 2003 où je
rajoute/remplace :








AppView.h




private:




int m_nColor;




CRect m_rectEllipse;







AppView.cpp









CAppView::CAppView() {




m_nColor = GRAY_BRUSH;




m_rectEllipse.SetRect(0,0,200,200);




}







CAppView::OnDraw() {




// sélection d’un ojbjet GDI, pen, brush, etc




pDC->SelectStockObject(m_nColor);




// dessine une éllipse




pDC->Ellipse(m_rectEllipse);




}










void CAppView::OnLButtonDown(UINT nFlags, CPoint point)




{




if (m_rectEllipse.PtInRect(point))




if (m_nColor == GRAY_BRUSH)




m_nColor = WHITE_BRUSH;




else




m_nColor = GRAY_BRUSH;




InvalidateRect(m_rectEllipse);




CView::OnLButtonDown(nFlags, point);




}





















où App est le nom de l'application.



Est ce que vous pourriez m'indiquer comment faire (j'ai essayer
(R,G,B)_BRUSH en remplaçant RG B par 250 0 0 mais ça amrche pas). Merci
d'avance de votre aide qui me sera precieuse pour une application que
je compte développer.

5 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 oct. 2005 à 21:40
Tu n'a pas de stock object pour chaque couleur. Pour d'autres couleurs, tu dois créer toi même un brush, avec CreateSolidBrush
En MFC c'est la classe CBrush qui encapsule HBRUSH, le constructeur te permet de spécifier la couleur:
CBrush brush(255, 0, 0); va te créer un CBrush rouge
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
8 oct. 2005 à 22:50
CAppView::CAppView()
{
m_nColor = 0;
m_rectEllipse.SetRect(0,0,200,200);
}

CAppView::OnDraw()
{
CBrush b(RGB(m_nColor, 0, 0));
// sélection d'un ojbjet GDI, pen, brush, etc
pDC->SelectObject(b);
// dessine une éllipse
pDC->Ellipse(m_rectEllipse);
}

void CAppView::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_rectEllipse.PtInRect(point))
{
m_nColor++;
m_nColor &= 0xFF;
}
InvalidateRect(m_rectEllipse);
CView::OnLButtonDown(nFlags, point);
}

Le carré est noir au debut, et devient de + en + rouge
3
ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 1
8 oct. 2005 à 21:49
Je te remercie beaucoup mais est ce que tu pourrais me donner plus de précision ? par exemple en modifiant les parties qu'il faut sur le code que j'ai mis
0
ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 1
9 oct. 2005 à 09:33
Salut , je ne comprends aps cette ligne la :



m_nColor &= 0xFF;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 oct. 2005 à 10:00
La composante en rouge va de 0 à 255 (0xFF). Comme j'incrémente a chaque fois, je vais finir par dépasser 255, donc le & permet de rester dans l'intervalle (en fait m_nColor passera à 0 après 255). Tu cliques 256 fois et tu verra que ton carré redevient noir
0
Rejoignez-nous