OVH Cloud OVH Cloud

Comment colorier un bouton créé par DrawFrameControl ?

4 réponses
Avatar
Eric
Bonjour à tous,

J'utilise la fonction DrawFrameControl de l'API pour créer un bouton (à
l'état "up" ou "down".

lReturn = DrawFrameControl(UserControl.hDC, udtRect, DFC_BUTTON,
DFCS_BUTTONPUSH)

Je dessine du texte dessus, une image, un rectangle de sélection... mais
je n'arrive pas à donner une couleur de fond à ce bouton. J'ai essayé la
fonction FillRect: ca marche mais je perds l'aspect "up" ou "down" du
bouton qui devient plat.

Comment dois-je m'y prendre? Dois-je nécessairement utiliser une autre
méthode de dessin du bouton (à savoir dessiner les coins du boutons avec
"drawedge"...)?

Merci

4 réponses

Avatar
Zoury
Salut Eric!

je n'ai rien testé, mais peut-être pourrais-tu utiliser un boutton standard,
intercepter le message WM_CREATE envoyé à la fenêtre lors de la création de
ce bouton, lui passé, entre autre, les styles BS_PUSHBUTTON et BS_BITMAP et
placé une image dedans avec la fonction SendMessage() et le message
BM_SETIMAGE.

voici un exemple du concept en C++ :
http://groups.google.com/groups?%240%2432527%24626a54ce%40news.free.fr


Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce qui
pourrait plus ardu..

--
Cordialement
Yanick
MVP pour Visual Basic
"Eric" a écrit dans le message de
news:%
Bonjour à tous,

J'utilise la fonction DrawFrameControl de l'API pour créer un bouton (à
l'état "up" ou "down".

lReturn = DrawFrameControl(UserControl.hDC, udtRect, DFC_BUTTON,
DFCS_BUTTONPUSH)

Je dessine du texte dessus, une image, un rectangle de sélection... mais
je n'arrive pas à donner une couleur de fond à ce bouton. J'ai essayé la
fonction FillRect: ca marche mais je perds l'aspect "up" ou "down" du
bouton qui devient plat.

Comment dois-je m'y prendre? Dois-je nécessairement utiliser une autre
méthode de dessin du bouton (à savoir dessiner les coins du boutons avec
"drawedge"...)?

Merci


Avatar
Eric
Ben en fait, le bouton est entièrement dessiné : contour, texte, image,
rectangle de sélection et flèche de menu sur la droite du bouton,
apparence normale ou de type toolbar... (j'ai récupéré le contrôle ici :
http://www.desertware.com/vbuniverse/vbusoftbutton2.html).

Comme ce contrôle marche à la perfection, j'aimerais juste modifier le
code pour afficher une couleur de fond sur le bouton (non géré par le
contrôle en l'état actuel). Le code concerné est le suivant :

--------------------------------------------------------------------------
If m_Style = 0 Then 'Soft Button
If mbMouseOver Or miCurrentButtonPressed > -1 Then
If mbButtonDown Then
'Draw Button Down State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH Or DFCS_PUSHED)
iDownOffset = 1
Else
'Draw Button Up State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH)
iDownOffset = 0
End If
End If
Else 'Normal Button
If mbButtonDown Then
'Draw Button Down State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH Or DFCS_PUSHED)
iDownOffset = 1
Else
'Draw Button Up State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH)
iDownOffset = 0
End If
End If
--------------------------------------------------------------------------

Je pourrais dessiner le bouton avec DrawEdge, FillRect... mais ne
puis-je rien faire pour la couleur s'il est dessiné avec
DrawFrameControl? :)

Eric


Zoury wrote:
Salut Eric!

je n'ai rien testé, mais peut-être pourrais-tu utiliser un boutton standard,
intercepter le message WM_CREATE envoyé à la fenêtre lors de la création de
ce bouton, lui passé, entre autre, les styles BS_PUSHBUTTON et BS_BITMAP et
placé une image dedans avec la fonction SendMessage() et le message
BM_SETIMAGE.

voici un exemple du concept en C++ :
http://groups.google.com/groups?%240%2432527%24626a54ce%40news.free.fr


Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce qui
pourrait plus ardu..



Avatar
Zoury
as-tu essayé d'appeler SetBKColor() avant DrawFrameControl() ?
http://msdn.microsoft.com/en-us/gdi/pantdraw_4b3g.asp

--
Cordialement
Yanick
MVP pour Visual Basic
"Eric" a écrit dans le message de
news:
Ben en fait, le bouton est entièrement dessiné : contour, texte, image,
rectangle de sélection et flèche de menu sur la droite du bouton,
apparence normale ou de type toolbar... (j'ai récupéré le contrôle ici :
http://www.desertware.com/vbuniverse/vbusoftbutton2.html).

Comme ce contrôle marche à la perfection, j'aimerais juste modifier le
code pour afficher une couleur de fond sur le bouton (non géré par le
contrôle en l'état actuel). Le code concerné est le suivant :

--------------------------------------------------------------------------
If m_Style = 0 Then 'Soft Button
If mbMouseOver Or miCurrentButtonPressed > -1 Then
If mbButtonDown Then
'Draw Button Down State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH Or DFCS_PUSHED)
iDownOffset = 1
Else
'Draw Button Up State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH)
iDownOffset = 0
End If
End If
Else 'Normal Button
If mbButtonDown Then
'Draw Button Down State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH Or DFCS_PUSHED)
iDownOffset = 1
Else
'Draw Button Up State
lReturn = DrawFrameControl(UserControl.hDC, udtRect,
DFC_BUTTON, DFCS_BUTTONPUSH)
iDownOffset = 0
End If
End If
--------------------------------------------------------------------------

Je pourrais dessiner le bouton avec DrawEdge, FillRect... mais ne
puis-je rien faire pour la couleur s'il est dessiné avec
DrawFrameControl? :)

Eric


Zoury wrote:
> Salut Eric!
>
> je n'ai rien testé, mais peut-être pourrais-tu utiliser un boutton


standard,
> intercepter le message WM_CREATE envoyé à la fenêtre lors de la création


de
> ce bouton, lui passé, entre autre, les styles BS_PUSHBUTTON et BS_BITMAP


et
> placé une image dedans avec la fonction SendMessage() et le message
> BM_SETIMAGE.
>
> voici un exemple du concept en C++ :
>


http://groups.google.com/groups?%240%2432527%24626a54ce%40news.free.fr
>
>
> Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce


qui
> pourrait plus ardu..
>


Avatar
Eric
Oui
Le pb est que je n'ai pas le hDC du bouton créé par DrawFrameControl,
donc si je passe le hDC du Usercontrol, ca ne va pas vu que le bouton
cache le fond du Usercontrol...

COLORREF SetBkColor(
HDC hdc, // handle to DC
COLORREF crColor // background color value
);

Zoury wrote:
as-tu essayé d'appeler SetBKColor() avant DrawFrameControl() ?
http://msdn.microsoft.com/en-us/gdi/pantdraw_4b3g.asp