Accueil > Forum > > > > Affichage Multilignes sur Bouton
Affichage Multilignes sur Bouton
samedi 2 février 2008 à 07:01:47 |
Affichage Multilignes sur Bouton

cartes1
|
Bonjour Serait-il possible d'afficher plusieurs lignes sur un bouton créé avec "CreateWindow(.....)" avec l'option BS_OWNERDRAW sous Visual 6 C++ sans utiliser les MFC. En effet avec les MFC et l'option |BS_MULTILINE|, c'est possible et plus simple, mais on ne peut pas modifier la couleur du fond et du texte du bouton. Merci d'avance. Cartes1
|
|
samedi 2 février 2008 à 16:32:46 |
Re : Affichage Multilignes sur Bouton

juju12
|
Oui c'est possible; de toutes façons en ownerdraw tu dois toi-même écrire le texte sur le bouton, alors tu peux très bien le faire sur plusieurs lignes...
|
|
samedi 2 février 2008 à 19:36:39 |
Re : Affichage Multilignes sur Bouton

cartes1
|
Justement non l'écriture suivie d'un retour à la ligne \r\n ne marche pas, le texte restant sur une seule ligne.
Cartes1
|
|
dimanche 3 février 2008 à 17:29:49 |
Re : Affichage Multilignes sur Bouton

juju12
|
D'accord, mais quel est ton problème alors? Comme je disais, si tu crées un bouton personnalisé ce sera à toi de gérer l'affichage du texte, et tu pourras faire en sorte de revenir à la ligne quand tu détectes le caractère adéquat dans la chaîne.
|
|
dimanche 3 février 2008 à 18:03:14 |
Re : Affichage Multilignes sur Bouton

cartes1
|
Le problème est que je débute en C++ ( je programme surtout en VB6 qui est beaucoup plus simple mais beaucoup moins puissant) et je ne vois pas comment faire pour afficher le texte de mon bouton sur 2 lignes (je me suis servi d'une fonction trouvée sur le net): voici ci-dessous la partie du code incriminé:
CODE: ///////////////////////////////////////////////////////////////////////////////////////////////// // dans la fonction ConstruitFenetrePrincipale:
hBoutonOuvrir=CreateWindow( "BUTTON", "", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|BS_MULTILINE|BS_OWNERDRAW, 10+10,20+310,130,30, fenetrePrincipale,(HMENU)ID_BOUTON_OUVRIR,instance,NULL);
/************* Fonction de dessin des boutons *******************************************/ /*************************************************************************************************/ void ConstruireBouton(LPDRAWITEMSTRUCT lpdrawstruct,LPCTSTR texte,COLORREF CouleurTexte,COLORREF CouleurFond) /*************************************************************************************************/ { //Déclarations: SIZE dimensions; char nom[50]; //Définir le texte du bouton: strcpy(nom, texte); //Déterminer les dimensions du texte: GetTextExtentPoint32(lpdrawstruct->hDC, nom, strlen(nom), &dimensions); //Définir la couleur du texte: SetTextColor(llpdrawstruct->hDC, CouleurTexte); //Définir la couleur du fond: SetBkColor(lpdrawstruct->hDC, CouleurFond); //Déterminer l'état du bouton: BOOL etat=lpdrawstruct->itemState & ODS_SELECTED; //Déterminer la largeur et la hauteur du bouton: int largeur=lpdrawstruct->rcItem.right-lpdrawstruct->rcItem.left; int hauteur=lpdrawstruct->rcItem.bottom-lpdrawstruct->rcItem.top; //Ecrire le texte sur le bouton: ExtTextOut(lpdrawstruct->hDC,(largeur-dimensions.cx)/2+etat, (hauteur-dimensions.cy)/2+etat, ETO_OPAQUE| ETO_CLIPPED, &lpdrawstruct->rcItem, nom, strlen(nom), NULL); //Dessin du cadre du bouton selon son état: DrawEdge(lpdrawstruct->hDC, &lpdrawstruct->rcItem,(etat ? EDGE_SUNKEN : EDGE_RAISED ), BF_RECT); //Retour: return; }
/*************************************************************************************/ LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam) /*****************************************************************************************************************/ { switch (message) {
case WM_CREATE: ConstruitFenetrePrincipale(fenetrePrincipale); return 0; case WM_DRAWITEM://Construction des boutons: { LPDRAWITEMSTRUCT lpdrawstruct = (LPDRAWITEMSTRUCT)lParam;
if (lpdrawstruct->hwndItem==hBoutonOuvrir) { ConstruireBouton(lpdis,"Ouvrir \r\n Base de donnée",CouleurBleu, CouleurJaune); return TRUE; } etc, etc... ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Merci d'avance pour ton aide
Cartes1
|
|
mardi 5 février 2008 à 00:07:20 |
Re : Affichage Multilignes sur Bouton

juju12
|
Ben c'est pas compliqué : si tu analyses ta fonction ConstruireBouton : d'abord le calcul de la place prise par le texte avec GetTextExtentPoint32 puis reglages couleurs SetTextColor et SetBkGndColor enfin ExtTextOut pour afficher le texte sur le bouton (j'ai zappé le cadre, pas concerné);
Dans ton cas, il va falloir d'abord compter le nombre de lignes que prendra le texte soit un truc genre : int nLines=0; for(LPSTR pStr=nom;*pStr;pStr++) if(*pStr=='\n') nLines++;
ensuite pour le placement tu peux par exemple : d'abord calculer la hauteur d'un élément (c'est la même pour tous je pense) par exemple avec GetTextExtentPoint32 : SIZE slHeight; GetTextExtentPoint32(lpDraw->hDC,nom,1,&slHeight); puis tracer les différentes lignes : LPSTR pLast=nom; int iLine=0; for(LPSTR pStr=nom;*pStr;pStr++) { if(*pStr=='\n') // si fin de ligne { int X=offset_x; int Y=offset_y+i*slHeight.cy int size=((int)pStr-(int)pLast)/sizeof(TCHAR); ExtTextOut(hDC,X,Y,...,pLast,size,NULL); pLast=pStr+1; // debut de la ligne suivante i++; } }
Bon je sais pas si ça marche tel quel (pas testé) mais j'espère que ça t'inspirera...
|
|
mardi 5 février 2008 à 17:48:34 |
Re : Affichage Multilignes sur Bouton

cartes1
|
Non ça ne marche pas non plus mais c'est simplement lié à la fonction ExtTextOut qui ne tolère pas l'affichage multilignes. Par contre j'ai trouvé une solution finalement plus simple pour la remplacer ( code ci dessous si ça peut dépanner quelqu'un). Merci encore pour ton aide .
Code: /*****************************************************************************************************/ void ConstruireBouton(LPDRAWITEMSTRUCT lpdrawStruct,LPCTSTR Texte,COLORREF CouleurTexte,COLORREF CouleurFond) /*****************************************************************************************************/ { RECT RectBouton = lpdrawStruct->rcItem; BOOL EtatBouton = lpdrawStruct->itemState & ODS_SELECTED; // Dessin du type de bouton DrawFrameControl( lpdrawStruct->hDC, &RectBouton, DFCS_BUTTONPUSH, EtatBouton ); // Changement de la taille du rectangle pour ne peindre que l'intérieur RECT RectBoutonText = RectBouton; // diminution de la taille du rectangle pour l'etat au repos InflateRect(&RectBoutonText, -2, -2); // Remplir le bouton avec la couleur du fond: FillRect(lpdrawStruct->hDC, &RectBoutonText, CreateSolidBrush(CouleurFond)); // Affecter le mode transparent à l'arrière-plan du texte à afficher SetBkMode(lpdrawStruct->hDC, TRANSPARENT); //Définir la couleur du texte: SetTextColor(lpdrawStruct->hDC, CouleurTexte); // Afficher le texte du bouton sur une ou plusieurs lignes: DrawText( lpdrawStruct->hDC, Texte, -1, &RectBoutonText, DT_CENTER | DT_VCENTER ); // Construire le cadre du bouton DrawEdge( lpdrawStruct->hDC, &lpdrawStruct->rcItem, (EtatBouton ? EDGE_SUNKEN : EDGE_RAISED ), BF_RECT ); return; } /************************************************************/ Cartes1
|
|
Cette discussion est classée dans : bouton, multilignes, possible, affichage, option
Répondre à ce message
Sujets en rapport avec ce message
affichage d'un boite de dialog avec un bouton d'une autre boite de dialog [ par Zaz16 ]
Bonjour,Je travaille avec VisualC++ 6.0 et les classes MFC.J'ai une boite de dialog "A" où on peut entrer un certain nombre de données, dont un bouton
Gestion des ellipses... [ par mistercov ]
Salut à tous !Je dois réaliser un logiciel de création et de visualisation d'ellipses et je voudrais être capable de pouvoir cliquer sur une ellipse,
affichage image + bouton zoom [ par doberman7578 ]
bonjour , Etant debutant sous GTK,je voudrai un code qui me permettrai d'afficher un image d'un repertoire. Cette image change toute les 1 seconde. J
Affichage d'une photo et arret d'affichage [ par rasta_raf ]
Bonjour,Je programme avec la bibliothèque MFC de Visual C++ 6.0 et j'ai créé une application SDI qui affiche une FormView où il y a 2 boutons (Bouton
Affichage d'une image sur un bouton [ par aztcaLISS ]
Salut, je veux faire apparaître une image sur mon bouton hBtn1 que je crer sur ma fenêtre mais ça ne fonctionne pas. J'ai vu dans des examples de code
Creation de bouton automatique ?? Es possible ? [ par lolooooooo ]
Bonjour tout le monde!! J'ai une question assez simple , peut on créer une fenêtre avec un bouton dedans et lorsque l'on appuis sur ce bouton il
Execution d'un programme partagée [ par kabannis72 ]
Bonjour, J'ai une idée de programmation, mais je ne sais si cela est possible. Ma question est simple, et en même temps compliquée : Est-il possible
Question toute bête d'affichage d'éléments ^^ [ par by_rabbit_08 ]
Bonjour!! J'ai une question surement fort simple pour beaucoup d'entre vous: Lorsque j'ai une simple fenêtre avec par exemple un bouton, une image, e
Associer au click d'un bouton l'affichage du contenu d'une variable dans une textbox [ par johnASP ]
Bonjours à tous!! Donc voilà, je débute avec le logiciel Microsoft Visual Studio 2005 ainsi qu'en C++. Pour l'instant je n'arrive qu'a afficher le co
C++ Winforms : PB Affichage lent d'un panel de 50 boutons [ par sebsebz ]
Je souhaite réaliser une application toute bête à partir de winform (en c++).Elle contient : Un formulaire avec une image de fond3 boutons principaux
Livres en rapport
|
Derniers Blogs
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 SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
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
|