Bonjour,
J'ai fait un petit peu de C++, mais je n'y connais rien du tout, e je n'ai jamais fait de MFC, j'aimerais savoir comment faire pour permettre à un Static Text de prendre plusieurs lignes :)
Merci
Version imprimable
Bonjour,
J'ai fait un petit peu de C++, mais je n'y connais rien du tout, e je n'ai jamais fait de MFC, j'aimerais savoir comment faire pour permettre à un Static Text de prendre plusieurs lignes :)
Merci
Je crois qu'il faut lui donner le style SS_MULTILINE.
Il doit y avoir une propriété correspondante dans les éditeurs graphiques de Visual (case à cocher sous Visual 6, champ dans la fenêtre Propriétés sous les versions supérieures)...
Ok, merci de ta réponse Médino, mais je suis sous Visual Studio 2005, j'ai dans la ToolBox, quand je choisi un Static Text, il n'y a pas ensuite dans les "properties"' de Multiline ou autre,...
Mais, je suis un vrai débutant, et peut-être n'ai-je pas compris ce que tu voulais dire par "donner le style Multiline", sinon, merci pour ta réponse,
et bonne journée !
N'as-tu pas une boîte dialogue avec divers onglets, dont "styles" et "extended styles" ?
Non, dsl, je te fais une copie d'écran :
Lien image zippé
C'est certainement un truc tout bête, je suis dsl, mais j'ai vraiment besoin de savoir comment faire,...
Autre image plus explicite
Je peux me tromper, mais j'ai fait une nouvelle image de Visual Studio 2005, ou je vois les Properties disponibles quand je mets le focus sur ma StaticText, et je ne vois rien qui ressemble à un multiLigne,...
(Par la même occasion, je cherche également comment faire pour définir une Font et mettre une couleur avec le designer, même si c'est moins urgent,...)
as-tu essayé de passer des '\n' dans ton CStatic ?
ou même \r\n dans ta string
Oui, je l'ai fait, mais malheureusement, cela ne fonctionne pas,...
EDIT : Ha mince !
Je me suis trompé, le problème est plus compliqué que cela,...
Je m'explique : je reprends un projet développé par quelqu'un de bien plus compétant, cette reprise ne devant nécessité que peu, et même très peu de difficulté, et j'ai tout de même pas mal de problèmes,...
Dans le cas présent, le prblm est que pour remplir mon IStatEditor, auquel une variable de type :a été attribué, le prog fait :Code:ns_mfc_ex::CStaticEx c_IsoS;
Ou :Code:SetUpStatic ( c_IsoS, 147 );
Et, avec cette manière d'opérer, j'ai beau mettre des \n et des \r dans ma string, il me les affiche tranquillement comme si de rien n'était, alors que si je mets simplement :Code:
1
2
3
4
5 void NomClasse::SetUpStatic ( ns_mfc_ex::CStaticEx &Ctrl, unsigned long iLabel ) { Ctrl.SetFont ( &m_FontLabel, TRUE ); Ctrl.SetWindowText ( ns_mfc_ex::CStringEx ( iLabel )); }
, je n'ai aucun problème,...Code:c_IsoS.SetWindowText("test \n\r test");
Personnellement je te conseillerai d'oublier ces CStatic et de directement gérer ton texte dans un ou plusieurs CString que tu afficheras à l'aide de DrawText
C'est sûr que c'est moins assisté, mais au moins tu as la main sur ce que tu fais.
Bon, là, je ne sais pas si qui que ce soit d'autre que le développeur du composant ns_mfc_ex::CStringEx qui puisse m'aider, et je n'ai pas les sources de ce composant,...
J'ai changé un peu le code, en passant d'abord par un CString, de sorte que cela fait :
Code:
1
2
3
4
5
6 void CPage01::SetUpStatic ( ns_mfc_ex::CStaticEx &Ctrl, unsigned long iLabel ) { Ctrl.SetFont ( &m_FontLabel, TRUE ); CString st = ns_mfc_ex::CStringEx ( iLabel ); Ctrl.SetWindowText ( st); }
Et, alors que le CString a la bonne valeur, avec un beau '\n', rien n'y fait, il me l'affiche comme si c'était un caractère normal,...
EDIT: TheGzD, j'aimerais pouvoir suivre ton conseil, seulement, je ne peux pas vraiment, je dois juste faire des modifs sur le projet, mais je trouve haïssable de ne pas avoir la main sur ce que l'on fait,...
nativement, le controle static est multiline
la seule explication que j'ai, c'est que ton controle CStaticEx se dessine lui meme et ne prend pas en charge le multiline ...
repasse sur un CStatic normal, ou recuperes le source de CStaticEx
@+
Ah, je viens de voir en effet qu'il n'y a pas de propriété MultiLine, j'ai confondu avec les EditBoxes.
Simplement, il faut s'assurer que le contrôle n'ait pas le style SS_SIMPLE (propriété "Simple").
La propriété Simple du Control est bien à false ici, mais ça ne change rien, il considère toujours mon \n comme un caractère normal,...
Merci quand même !
Utilisez l'utilitaire Spy++ pour connaître les propriétés de votre contrôle "en live"
Merci bacelar pour m'avoir appris cette utilisation de Spy++, je ne savais pas.
Malheureusement, j'ai vérifié en mettant le curseur sur mon IStatic, et ça me montre qu'il n'y a pas de Syles, ni d'Extended Styles qui ressemble à un Simple, ce qui correspond bien à ce que j'ai dans mon designer sous Visual,...
@TheGzD, désolé, j'avais mal écrit, j'ai édité entre temps, je voulais dire que ma propriété Simple était bien à False, et malgré cela, je me retrouve avec cette image :
image avec un \n dans mon CStatic avec Simple à false
Mais, de toute manière, si dans mon code je fais ceci (ou c_IsoS est le contrôle associé à mon CStatic):
Là, ça se passe très bien, aucun problème, mes lignes sont bien sautées,...Code:c_IsoS.SetWindowText("Montexte avec des \n,...");
Mais par contre, si je fais :
ou SetUpStatic =Code:SetUpStatic ( c_IsoS, 147 );
Là, c'est mort, et ça ne vient pas du CString, puisque si j'initialise le CString avec un truc comme ça :Code:
1
2
3
4
5
6
7 void MaClasse::SetUpStatic ( ns_mfc_ex::CStaticEx &Ctrl, unsigned long iLabel ) { Ctrl.SetFont ( &m_FontLabel, TRUE ); CString st = ns_mfc_ex::CStringEx ( iLabel ); // ici, st a bien des \n normaux,... Ctrl.SetWindowText ( st); }
Je n'ai aucun problème non plus, je ne sais aps ce que fait la classe ns_mfc_ex::CStringEx, mais visiblement elle empêche le CString de considérer les \n pour des retours chariots, c'est très perturbant,...Code:
1
2
3 st= "test \n test"; Ctrl.SetWindowText(st);
OK, c'est résolu, le précédent développeur, un gars très sympa, a été contacté et a accepté de nous passer une nouvelle classe, qui accepte le multiligne, désolé du dérangement, mais je voulais être sûr que le problème venait du composant et pas de ma manière de programmer,...