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"...)?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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".
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
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?threadm@16d03d%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" <ericbellina@wanadoo.fr> a écrit dans le message de
news:%23vMAxFqCFHA.520@TK2MSFTNGP09.phx.gbl...
Bonjour à tous,
J'utilise la fonction DrawFrameControl de l'API pour créer un bouton (à
l'état "up" ou "down".
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"...)?
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".
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
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..
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?threadm@16d03d%240%2432527%24626a54ce%40news.free.fr
Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce qui
pourrait plus ardu..
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..
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++ : >
> > > Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce
qui
> pourrait plus ardu.. >
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" <ericbellina@wanadoo.fr> a écrit dans le message de
news:O0mvbWtCFHA.1540@TK2MSFTNGP09.phx.gbl...
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++ :
>
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++ : >
> > > Sinon, tu pourrais lui passé BS_OWNERDRAWN et le dessiner toi même, ce
qui
> pourrait plus ardu.. >
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
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
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