Texte tronqué dans un static

Résolu
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 4 févr. 2005 à 17:50
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 5 févr. 2005 à 11:11
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
4 févr. 2005 à 18:52
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.
3
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
5 févr. 2005 à 11:11
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 !!!
0