begin process at 2012 05 29 08:37:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

GUI

 > 

Hauteur de static


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Hauteur de static

vendredi 28 janvier 2011 à 22:02:59 | Hauteur de static

mogwai93

Bonjour

j'ai un controle de type static contenant du texte
la largeur de ce controle est fixe
seule sa hauteur peut varier.
la police peut changer (même si elle reste identique pour tout le static)

avec GetTextExtentPoint32
j'arrive à calculer la hauteur necessaire (même quand le static "crée" les sauts de ligne pour tout afficher)

mon problème est quand le texte contient des sauts de ligne (mon code fonctionne si le texte ne contient pas de saut de ligne)


comment trouver la hauteur quand le texte du static contient des sauts de ligne ?


(en win32)
merci
samedi 29 janvier 2011 à 04:47:00 | Re : Hauteur de static

mogwai93

j'ai trouvé une méthode :
il faut que je découpe mon texte en plusieurs char* (1 par ligne)
ensuite je fais la somme des hauteurs de chaque ligne avec GetTextExtentPoint32
je réaffiche ensuite mon texte et c'est bon

s'il y a mieux, je suis preneur
samedi 29 janvier 2011 à 05:58:47 | Re : Hauteur de static

mogwai93

"mon code fonctionne si le texte ne contient pas de saut de ligne"
en fait pas tout à fait

j'avais fait
GetTextExtentPoint32(hEditDc, Texte, nStrLen, &textSize);
Nblines = textSize.cx / largeur + 1;

en fait, ça fonctionne en fonction de la position des espaces à l'interieur du texte
GetTextExtentPoint32 semble retourner la hauteur si tout est affiché sur une seule ligne
dès que l'affichage du static génère des sauts de ligne, GetTextExtentPoint32 n'en tient pas compte

comment faire ?
merci
samedi 29 janvier 2011 à 17:46:58 | Re : Hauteur de static

BruNews

Administrateur CodeS-SourceS
Jette un oeil sur GetTextMetrics().

ciao...
BruNews, MVP VC++
lundi 31 janvier 2011 à 23:02:15 | Re : Hauteur de static

racpp

Administrateur CodeS-SourceS
Salut,
Tu peux utiliser DrawText() en lui passant DT_CALCRECT en dernier paramètre. Exemple:
Code C/C++ :
RECT rect={0};
HDC hdc=GetDC(0);
DrawText(hdc,"Première ligne\r\nDeuxième ligne\r\nTroisième ligne",-1,&rect,DT_CALCRECT);
ReleaseDC(0,hdc);

Ne pas oublier d'uliser SelectObject() pour sélectionner la bonne police avant d'appeler DrawText(). Les dimensions se retrouveront dans le RECT.
mardi 1 février 2011 à 09:00:38 | Re : Hauteur de static

louis14

Bonjour,

Si tu caonnais la longueur de ton texte sur une ligne et la longueur de ton static tu peux calculer le nombre de ligne . Non?


louis
mardi 1 février 2011 à 11:31:33 | Re : Hauteur de static

mogwai93

"Si tu connais la longueur de ton texte sur une ligne et la longueur de ton static tu peux calculer le nombre de ligne . Non? "

Ce que je croyais au début.

Il faudrait que je trouve un texte pour montrer un exemple parlant.
J'ai un texte qui contient plusieurs mots avec ou sans "\r\n".
si je tombe sur \r\n je sais qu'une ligne a été forcée, mon problème c'est le texte sans les sauts de ligne

Quand tu ne forces pas le saut de ligne
Windows crée des sauts de ligne pour afficher le texte dans le static

GetTextExtentPoint32 te donnes la longueur si le texte est sur 1 ligne
donc comme tu dis, le nombre de lignes devrait être égal à ((GetTextExtentPoint32 / largeur_du_static) + 1)
or ca ne fonctionne pas tout le temps : ca depend du nombre de mots et de la longueur des mots
et de la largeur des lettres utilisées (donc de la police)
donc dans certains cas nombre de lignes = ((GetTextExtentPoint32 / largeur_du_static) + 1)
et dans d'autres cas, c'est +


je vais voir pour GetTextMetrics et DrawText
mardi 1 février 2011 à 12:19:35 | Re : Hauteur de static

racpp

Administrateur CodeS-SourceS
Si ton static ajoute les sauts de lignes automatiquement, tu devras mettre DT_WORDBREAK avec DT_CALCRECT. Le membre right du RECT doit contenir la largeur du static avant l'appel de DrawText(). Exemple:
Code C/C++ :
RECT rect={0};
HDC hdc=GetDC(0);
rect.right=70;
DrawText(hdc,"Première ligne longue\r\nDeuxième ligne\r\nTroisième ligne",-1,&rect,DT_CALCRECT | DT_WORDBREAK);
ReleaseDC(0,hdc);

Je pense que DrawText() devrait résoudre ton problème.


Cette discussion est classée dans : ligne, texte, static, hauteur, sauts


Répondre à ce message

Sujets en rapport avec ce message

RichEdit Paint [ par crocejf2000 ] Salut a tous,-->OS Win98, Borland C++ 5Je suis toujours avec mon compilateur maison, et j'ai un petit probleme d'affichage de ma RichEdit -> c'est pou pb avec tableau et fichier texte [ par krolanta ] Voila mon pb é que g un fichier texte avec des coordonnées et que je voudrais mettre chaque coordonnées ds une case du tableau.En fait ca revient a li Lire un fichier Texte Ligne par ligne [ par Ricpperso ] Bonjour,bon je fai un pti proget je voudrai savoir comment on fais pour lire un fichier Texte ligne par ligne, avec si possible le Cfile.merci d'avanc Lire une ligne d'un fichier texte [ par CassusGreg ] Salut à tous,Est-ce-qu'il existe une fonction pour lire une ligne de texte (terminé par 0x0D 0x0A) dans un fichier?Je suis sous VC++ 6merci prob setwindowtext [ par flatou ] Probleme tout con, je veux changer le texte d'un static (ou d'un editbox), pour cela j'utilise SetWindowTest(). Le prob est que le nouveau texte se su aller à la ligne dans un champ texte VC++ [ par Vaughn018 ] Bonjour,après insertion d'un texte dans une ressource "edittext" qui a déjà certaines options activées (comme ES_MULTILINE), je ne vois jamais le text fichier texte [ par codavi ] Bonjour, Voilà, je viens de décrouvrir ce forum et je souhaiterais que quelqu'un m'apporte un peu d'aide. Je veux pouvoir lire/ecrire dans un fichier Recherche une ligne dans un fichier texte [ par kamelDEA ] Bonjour,J'ai un fichier texte qui contient 100 ligne.chaque ligne est composée de 4 valeurs décimales (valeur de probabilité)J'arrive pas à touver la Compilateur : AutoFormatage du texte [ par crocejf2000 ] Salut a tous,J'ai effectué un compilateur sous borland c++ 5 et je veut que lorsque j'edite mon source ca formatte automatiquement le texte : pour arr Compilateur : AutoFormatage du texte [ par crocejf2000 ] Salut a tous,J'ai effectué un compilateur sous borland c++ 5 et je veut que lorsque j'edite mon source ca formatte automatiquement le texte : pour arr


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales