Personnaliser le texte d'un contrôle "EDIT"

Ilmen_ Messages postés 55 Date d'inscription dimanche 13 mai 2007 Statut Membre Dernière intervention 10 août 2007 - 5 juin 2007 à 16:11
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 5 juin 2007 à 23:56
Voila, dans un topic précédent, j'avais voulu savoir comment savoir comment attribuer une fonte personnalisée à un contrôle de type "EDIT" ; n'ayant pas réussi à appliquer les solutions que l'on m'a proposé, je vais présenter un exemple concret :





void CreateFont(HWND hWnd, char *chaine, unsigned int dimensions, BOOL souligne, char *police, COLORREF couleur)

{

// Déclarations préalables

LOGFONT structFonte;

HFONT Fonte_BASE_COUNT;

HDC dc=GetDC(hWnd);

// Remplissage de la LOGFONT

ZeroMemory(&structFonte, sizeof(LOGFONT));

strcpy(structFonte.lfFaceName, police);

structFonte.lfHeight = -MulDiv(dimensions, GetDeviceCaps(dc,LOGPIXELSY),72);

structFonte.lfUnderline = souligne;

// Création de la fonte à partir de structFonte dans fonte

Fonte_BASE_COUNT = CreateFontIndirect(&structFonte);

// Permet au texte d'avoir un fond transparent

SetBkMode(dc, TRANSPARENT);

// Applique la fonte au dc de texte

HFONT oldfont=(HFONT)SelectObject(dc, Fonte_BASE_COUNT);

// Applique la couleur de texte au dc

SetTextColor(dc, couleur);

// Affichage du texte

TextOut(dc, 100, 120, chaine, strlen(chaine));

// Libération de la surface et du dc

// SelectObject(dc, oldfont);

// ReleaseDC(hWnd,dc);

// DeleteObject(Fonte_BASE_COUNT);

return;

}

(...)

HWND BASE_COUNT;
// Le nom de mon EDIT (handle)

HWND affiche_BASE_COUNT (HWND hWnd)

{

HWND BASE_COUNT=CreateWindow(

"EDIT",

"T : \r\nC : \r\nA : \r\nG : \r\nTotal : ",

WS_VISIBLE|WS_CHILD|WS_BORDER|ES_MULTILINE|ES_LEFT,

400, 185, 190, 120, hWnd, NULL, instance, NULL);

// Assigner la fonte à l'EDIT :

HFONT Fonte_BASE_COUNT=CreateFontIndirect(&structFonte);
// structFonte n'est pas déclaré... Comment faire ?

SendMessage (BASE_COUNT, WM_SETFONT, 0, (WPARAM)Fonte_BASE_COUNT, 1);

return BASE_COUNT;

}






Comment mettre la police déterminée dans <tt>void CreateFont()</tt> ici sans tout réécrire ? =/

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 24
5 juin 2007 à 23:56
Le seul moyen efficace pour personnaliser un controle est le sous-classement, qui permet d'avoir une procédure de fenetre totalement gérée par le programmeur (couleur, fonte, dessin du controle ect...)

Exemple simple ici pour des editBox :
http://www.cppfrance.com/codes/CPLUSPLUS-WIN32-TYPEDEF_VIEWER-CONTROLES-ETENDUS_41206.aspx
0