Texte tronqué dans un static [Résolu]

Signaler
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Bonjour j'aurais deux petites questions de debutants.



Je suis en train de sousclasser un controle de windows, il s agit d'un
simple texte en static, j'aimerais le dessiner autrement seulement
voila XP l'affiche sur deux ligne si le texte est trop long tandis que
moi avec Textout et drawtext je n'ai pas trouvé de fonction pour
pourvoir faire ca, ya bien la notion de clipping mais ce qui depasse
n'est pas affiché !!



Sinon le code qui suiz et une fonction permettant de faire une barre en degradé



HPEN currPen;

for ( ; i < D; ++i) {

if (fRed) fRed -= 128 / deca;

if (fBlue) fBlue -= 128 / deca;

if (fGreen) fGreen -= 128 / deca;



currPen = CreatePen(PS_SOLID, 1, RGB(fRed, fGreen , fBlue));

SelectObject(lpds->hDC,currPen);



MoveToEx(lpds->hDC, rect.left ,rect.bottom - i, (LPPOINT) NULL);

LineTo(lpds->hDC, rect.right , rect.bottom - i);



}

DeleteObject( currPen );



Et je voulais savoir si j'etais bon au niveau de la
liberation parce que currPen change a chaque boucle ( j'ai vu ca en
mode debug alors que je croyais qu'un pointeur était constant) mais je
ne le libere qu'une seule fois !!

2 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
currpen n'est pas un pointeur mais un hadle (interne à windows). Parcontre comme avec les ponteur, chaque création doit être accompagé d'une destruction.

De même lorsque tu selectionne un object dans un DC avec SelectObject, il faut sauvegarder la valeur de retour (ancien objet) puis resélectionné cette valeur avant de détruire l'objet qui est dedans.
HPEN currPen, oldpen;

for ( ; i < D; ++i) {
if (fRed) fRed -= 128 / deca;
if (fBlue) fBlue -= 128 / deca;
if (fGreen) fGreen -= 128 / deca;

currPen = CreatePen(PS_SOLID, 1, RGB(fRed, fGreen , fBlue));
oldpen = (HPEN) SelectObject(lpds->hDC,currPen);

MoveToEx(lpds->hDC, rect.left ,rect.bottom - i, (LPPOINT) NULL);
LineTo(lpds->hDC, rect.right , rect.bottom - i);
SelectObject(lpds->hDC, oldPen);
DeleteObject( currPen );
}


En ce qui concerne le problème d'affichage sur plusieures lignes, essaye DrawText aevc
DT_WORDBREAK.
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

Nickel ymca2003 et encore merci en ce moment c'est toujour toi qui me repond !!

Pour les destructions je n'etais pas sur, je savais qu'il me fallait
rendre la valeur de retour mais comme l'application marchait sans
probleme je ne pensais pas que c'était aussi important.

Pour drawtext c'est exactement ca, la j'aurais du mieux chercher !!!