Accueil > Forum > > > > Modifier les propriétés des controles boutons (image, texte, couleur, ...)
Modifier les propriétés des controles boutons (image, texte, couleur, ...)
vendredi 5 mai 2006 à 11:38:06 |
Modifier les propriétés des controles boutons (image, texte, couleur, ...)

skirby
|
Bonjour tout le monde, J'aurais voulu savoir si il était possible de créer des boutons sur lesquels on pourrait : - afficher une icone (depuis un fichier .ico) - afficher un texte sous l'icone - modifier la couleur de fond du bouton le tout sans utiliser BS_OWNERDRAW Je vais me faire fusiller mais sous VB ou Delphi c'est possible directement depuis l'IDE. J'imagine que cela doit être possible en appelant quelques API de Windows non ? Voici ce que j'arrive à faire pour le moment: - je créer ma boite de dialogue depuis ResED, je place un bouton de style icone et j'ajoute mon icone dans les ressources - depuis mon code, j'arrive à lui affecter mon icone (LoadIcon) Mon problème et que je n'arrive pas à changer la couleur de fond du bouton. J'ai cru comprendre que ce n'était pas possible sans gérer complètement le bouton soit même. Est-ce vrai ? Sinon j'ai essayé de m'inspirer de la source suivante: http://www.cppfrance.com/codes/COULEURS-TRANSPARENCE-CONTROLES-API_27889.aspx J'arrive à changer la couleur et mettre un texte sur mon bouton mais je n'arrive pas à ajouter mon icone. Merci d'avance pour vos réponses.
|
|
samedi 6 mai 2006 à 23:31:21 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

Gendal67
|
bonsoir,
il faut traiter le message WM_CTLCOLORBTN et retourner un (long) HBRUSH. exemple :
// WinProc
case WM_CTLCOLORBTN:
return (long) (HBRUSH) GetStockObject(BLACK_BRUSH); break;
Et voila 
|
|
dimanche 7 mai 2006 à 04:21:55 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

racpp
|
Réponse acceptée !
Salut,
Gendal67 >> A ma connaissance, le message WM_CTLCOLORBTN ne permet pas de changer la couleur de fond d'un bouton. Si c'était possible je l'aurais utilisé dans mon code source cité par l'auteur de cette question. Tu as déjà utilisé ce message? Et ça a marché?
skirby >> Un bouton n'est pas comme les autres controles. Son apparence dépend de son état: enfoncé, relaché, ayant ou non le focus etc. Pour faire ce qu'on veut de notre bouton, il faut obligatoirement qu'il soit de type BS_OWNERDRAW. Ainsi, on peut le personnaliser comme on veut. Pour charger une icone à partir d'un fichier on utilise la fonction LoadImage() comme ceci per exemple:
HICON icone=(HICON)LoadImage(0,"monicone.ico",IMAGE_ICON,16,16,LR_LOADFROMFILE);
Pour afficher cette icone quelque part sur le bouton, on utilise la fonction DrawIcon() pendant le traitement du message WM_DRAWITEM comme ceci:
ExtTextOut(lpds->hDC.....//Cette fonction efface le fond et écrit du texte
DrawIcon(lpds->hDC,x,y,icone);// x et y indiquent la position de l'icone.
Ainsi, l'icone sera placée là où on veut: sous le texte, en dessus, à droite, à gauche etc.
Il est vrai qu'avec VB ou Delphi c'esp plus facile, mais grâce aux API on peut faire beaucoup plus car on maitrise totalement l'apparence et le comportement de notre bouton.
|
|
dimanche 7 mai 2006 à 11:01:21 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

skirby
|
Salut racpp,
merci de ta réponse, je vais essayer ça de suite.
|
|
mardi 9 mai 2006 à 12:34:44 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

skirby
|
C'est encore moi. J'ai suivi tes explications racpp et ça fonctionne très bien (j'ai un bouton de couleur avec une icône). Le seul truc qui ne va pas c'est que je n'arrive pas à avoir l'effet "bouton appuyé" En fait, l'icône reste en position 0,0 (position donnée dans la fonction DrawIcon)
Comment faire pour que mon image donne la sensation de s'enfoncer quand on appui sur le bouton ?
Merci d'avance.
|
|
mardi 9 mai 2006 à 13:48:59 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

Gendal67
|
case WM_DRAWITEM:
DRAWITEMSTRUCT* pdis = (LPDRAWITEMSTRUCT) lParam;
if(pdis->itemState & ODS_SELECTED) InvertRect(pdis->hDC, &pdis->rcItem);
return 0;
Et voila, tu obtiens bien un effet de pression de boutton...si tu veux quelque chose de +complexe, rajoute des commandes autre que InvertRect 
|
|
mardi 9 mai 2006 à 15:04:42 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

skirby
|
Salut Gendal67,
Ce n'est pas tout à fait ça que je voulais. InvertRect fait un NOT logique sur la couleur de chaque pixel.
J'aurais aimé avoir un bouton avec une image qui s'enfonce quand on clique sur le bouton tout simplement. En fait c'est le mode de fonctionnement normal quand le bouton n'utilise pas le style BS_OWNERDRAW
Une idée ?
|
|
mardi 9 mai 2006 à 19:25:16 |
Re : Modifier les propriétés des controles boutons (image, texte, couleur, ...)

Gendal67
|
Oui oui ne t'inquiète pas j'avais compris  Je pensais juste que tu ne savais pas où mettre le code correspondant, dans quel cas je t'ai répondu en disant : "à la place du InvertRect".
Pour ton problême, je te conseille carrément de dessinner son apparence "normale de bouton enfoncé". Essaie voir de mettre une ligne en pointillée pour montrer que le bouton a le focus et une ligne noire tout autour ombrée en haut et sur le coté gauche.
J'imagine que je suis très clair -_-" ....en fait j'ai testé la "tête" qu'avait un bouton lorsqu'on cliquait dessus (sans relacher la souris pour avoir le temps de voir ).
Donc voila ce que personnellement j'écrirais en code :
case WM_DRAWITEMSTRUCT: DRAWITEMSTRUCT* pdis = (LPDRAWITEMSTRUCT) lParam; int cx, cy;
cx = pdis->rcItem.right - pdis->rcItem.left; cy = pdis->rcItem.bottom - pdis->rcItem.top;
HPEN hPen, hOld;
if(pdis->itemState & ODS_SELECTED) { hPen = CreatePen(PS_SOLID, 3, RGB(128,128,128)); hOld = SelectObject(pdis->hDC, hPen); MoveToEx(pdis->hDC, 0, 0, NULL); LineTo(pdis->hDC, cx - 1, 0);
MoveToEx(pdis->hDC, 0, 0, NULL); LineTo(pdis->hDC, 0, cy - 1);
SelectObject(pdis->hDC, hOld); DeleteObject(hPen); }
if(pdis->itemState & ODS_FOCUS) { FrameRect(pdis->hDC, &pdis->rcItem, (HBRUSH) GetStockObject(BLACK_BRUSH));
pdis->rcItem.left += cx / 16; pdis->rcItem.top += cx / 16; pdis->rcItem.right -= cx / 16; pdis->rcItem.bottom -= cx / 16;
DrawFocusRect(pdis->hDC, &pdis->rcItem); }
return 0;
Essayez peut-être ceci et dites moi si cela correspond à ce que vous cherchiez. Par contre, il faut peut-être ajuster les positions en x et y dans MoveToEx....tout dépend de comment Windows dessine. Là je suis parti du principe qu'avec le pinceau de 3 pixels d'épaisseur, le pixel le plus proche du coté sera dessiné aux positions indiquées par cette fonction.
Enfin voila, tenez moi au courant 
|
|
Cette discussion est classée dans : arrive, texte, possible, icone, couleur
Répondre à ce message
Sujets en rapport avec ce message
editbox et couleur [ par Anacr0x ]
Salut !J'ai deux ou trois ptite question a posé :a votre avis, est il possible d'avoir plusieur couleur de texte dans une editbox (ce qui m'étonneré)
Couleur dans "EDIT" [ par Ifrit235 ]
Salut a tous, je suis en train de programmer un éditeur de texte et j'aimerai savoir comment changer la couleur du texte (ou une partie) dans un "edit
static [ par leprov ]
salut a tous.bon alors voila. je fais une fenetre, et je voudrais placer quelques statiques. la j'ai plusieurs questions. la premiere étant comment fa
COuleur dans un textedit [ par tetedemul ]
Bonjour, je développe un ide pour l'asm, et je souhaite faire une coloration syntaxique.Je sais comment la faire (traitement ok), je l'ai réalisé sous
du texte en couleur avec C [ par Amine_s11 ]
salut tt le monde comment peut-on modifier la couleur du texte affiché en C quel bibliotheque utiliser et quel fonctions. peut on ainsi modifier la
Récupérer le texte d'une icone d'une ListView [ par MorbhAck ]
Bonsoir a tous !J'aurais un petite question ...Je voudrais récupérer le nom d'une icone d'une listView.J'ai une piste mais je block un peu :shttp://ms
changement de couleur du texte uniquement pour rich edit?? [ par youpiyoyo ]
j'ai réaliser un sous classement pour une edit control et WM_MOUSEMOVE egalement préparer pour celle-cij'essaye de changer la couleur du texte selecti
texte opengl qui change de couleur [ par mondrone ]
J'ai un programme OpenGL (+ Glut sous DevCpp) qui suivant certaines touches doit afficher des phrases prédéfinies à l'écran avec glutBitmapCharacter.
STATIC, SetWindowText et icone[Dev-C++] [ par mastermatt29 ]
Salut tout le monde !! Il se trouve que j'ai un problème avec mon code ! Premierement j'ai un static, déclaré avec CreateWindowEx(...). Je lui ai don
[MFC] Couleur d'un texte [ par ekinox17 ]
C'est simple, j'aimerai savoir comment changer la couleur d'un texte : je pensai pouvoir le faire avec un CFont : mais nan et je sais pas comment fair
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|