Utiliser la police DEFAULT_GUI_FONT lors de l'affiche d'un texte avec la classe STATIC

Le
victor.thuillier
Bonjour,

J'ai une question de débutant. Je créé une simple chaine à afficher
comme ça :

CreateWindow (TEXT ("static"), TEXT ("Hello world !"), WS_CHILD |
WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1, ((LPCREATESTRUCT) lParam)-
>hInstance, NULL);

lorsque ma procédure reçoit le message WM_CREATE. Le texte est affich=
é
avec la police par défaut du système. Moi je veux utiliser la police
par défaut pour les applications en GUI (donc utiliser la constante
DEFAULT_GUI_FONT) comme avec TextOut. Comment faire ?

Merci pour toute réponse.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #19503451
wrote:

J'ai une question de débutant. Je créé une simple chaine à afficher
comme ça :
CreateWindow (TEXT ("static"), TEXT ("Hello world !"), WS_CHILD |
WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1, ((LPCREATESTRUCT) lParam)->
hInstance, NULL);

lorsque ma procédure reçoit le message WM_CREATE. Le texte est affiché
avec la police par défaut du système. Moi je veux utiliser la police
par défaut pour les applications en GUI (donc utiliser la constante
DEFAULT_GUI_FONT) comme avec TextOut. Comment faire ?



Par ex =>

HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hStatic, WM_SETFONT, (WPARAM)hFont, TRUE);
victor.thuillier
Le #19504571
Ça ne fonctionne pas. Dans mon WM_CREATE, j'ai ça (ce n'est pas
DEFAULT_GUI_FONT mais ANSI_VAR_FONT que je veux utiliser en fait) :

case WM_CREATE :
hdc = GetDC (hwnd);

hFont = (HFONT) GetStockObject (ANSI_VAR_FONT);
SendMessage (hwnd, WM_SETFONT, (WPARAM) hFont, TRUE);

label = CreateWindow (TEXT ("static"), TEXT ("Hello
world !"), WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1,
((LPCREATESTRUCT) lParam)->hInstance, NULL);

GetTextMetrics (hdc, &tm);
cxChar = tm.tmAveCharWidth;
cyChar = HIWORD (GetDialogBaseUnits());

ReleaseDC (hwnd, hdc);

return 0;

Merci pour toute aide apportée.
Christian ASTOR
Le #19504961
wrote:

case WM_CREATE :
hdc = GetDC (hwnd);

hFont = (HFONT) GetStockObject (ANSI_VAR_FONT);
SendMessage (hwnd, WM_SETFONT, (WPARAM) hFont, TRUE);

label = CreateWindow (TEXT ("static"), TEXT ("Hello
world !"), WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1,
((LPCREATESTRUCT) lParam)->hInstance, NULL);



Le SendMessage(), c'est au Static control !
Sylvain SF
Le #19504951
a écrit :
Ça ne fonctionne pas. Dans mon WM_CREATE, j'ai ça (ce n'est pas
DEFAULT_GUI_FONT mais ANSI_VAR_FONT que je veux utiliser en fait) :

case WM_CREATE :
hdc = GetDC (hwnd);

hFont = (HFONT) GetStockObject (ANSI_VAR_FONT);
SendMessage (hwnd, WM_SETFONT, (WPARAM) hFont, TRUE);

label = CreateWindow (TEXT ("static"), TEXT ("Hello
world !"), WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hwnd, (HMENU) 1,
((LPCREATESTRUCT) lParam)->hInstance, NULL);

GetTextMetrics (hdc, &tm);
cxChar = tm.tmAveCharWidth;
cyChar = HIWORD (GetDialogBaseUnits());

ReleaseDC (hwnd, hdc);
return 0;



Christian a dit : "SendMessage(hStatic, WM_SETFONT, ...)

c'est sur le *label* qu'il faut fixer la fonte pas sur le container,
les fontes (comme pas mal d'attributs) ne sont pas hérités entre
parent et childs.

sinon:
- je mettrais des coordonnées non nulles pour le Static,
- le HINSTANCE transmis à CreateWindow ne sert à rien
(sauf avec W98 mais c'est sûrement pas le cas).
- le GetDC, GetTextMetrics, ReleaseDC n'ont rien à faire dans
un WM_CREATE; ils peuvent servir dans le WM_PAINT.

Sylvain.
victor.thuillier
Le #19506931
> - je mettrais des coordonnées non nulles pour le Static,
- le HINSTANCE transmis à CreateWindow ne sert à rien
   (sauf avec W98 mais c'est sûrement pas le cas).
- le GetDC, GetTextMetrics, ReleaseDC n'ont rien à faire dans
   un WM_CREATE; ils peuvent servir dans le WM_PAINT.

Sylvain.



1) Les coordonnées sont modifiées lors d'un WM_SIZE
2) Ah, je savais pas, mais le texte s'affiche toujours avec cette
vieille police moche
3) Les variables cxChar et cyChar sont statiques, ça m'évite de le
mettre dans un WM_PAINT (leur valeur ne changera pas au cours du
programme)

Le SendMessage(), c'est au Static control !



Désolé, je comprends pas ce que ça veut dire.
victor.thuillier
Le #19506921
Ah ok, merci, donc avec "label" en premier paramètre de SendMessage et
non "hwnd" (ma fenêtre principale), ça fonctionne bien, merci. :)
Publicité
Poster une réponse
Anonyme