Chargement des styles Windows XP OK, mais polices moches

Chargement des styles Windows XP OK, mais polices moches - API Win32 - Programmation

Marsh Posté le 27-03-2011 à 00:36:22    

Depuis que j'ai activé la prise en charge des styles xp pour mon appli utilisant l'api Win32, j'ai des beaux boutons en relief trop beaux  :ange:  
 
Sauf que...
 
La police est toujours assez grosse et moche (dans les boutons, les combo, les static, bref partout..)
Il faut en fait charger la police système et l'appliquer à tous les controles.
 
J'ai trouvé le code sur certains forums, je n'ai aucune erreur de compilation mais ca ne fonctionne toujours pas....
 
Ce que j'ai (gros et moche) :
http://img714.imageshack.us/img714/2320/monappli.png
 
Ce que j'aimerai avoir (trop beau windows  :ange: ) :
http://img222.imageshack.us/img222/8273/winj.png
 
 
Ci dessous le code en question :

Code :
  1. /* Début du main, les classes etc.... */
  2.        fenetrePrincipale = CreateWindow(
  3.                             "classeFenetrePrincipale", "Jeu",
  4.                             WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT,
  5.                             280, 350,
  6.                             NULL, NULL, cetteInstance, NULL);
  7.     if (!fenetrePrincipale) return FALSE;
  8.     fenetreHebergerPartie = CreateWindow(
  9.                                 "classeFenetreHebergerPartie", "Heberger une partie ...",
  10.                                 WS_SYSMENU | WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT,
  11.                                 457, 340,
  12.                                 fenetrePrincipale, NULL, cetteInstance, NULL);
  13.     if (!fenetreHebergerPartie) return FALSE;
  14.    
  15.     GetWndFont(hGlobalFont);
  16.     EnumChildWindows(fenetrePrincipale, setWndFont, 0);
  17.     ShowWindow(fenetrePrincipale, SW_SHOW);
  18.     UpdateWindow(fenetrePrincipale);
  19.     while (GetMessage(&message, NULL, 0, 0))
  20.     {
  21.         TranslateMessage(&message);
  22.         DispatchMessage(&message);
  23.     }
  24.     return message.wParam;
  25. } // Fin du main
  26. HFONT GetWndFont(HFONT hGlobalFont)
  27. {
  28.         NONCLIENTMETRICS info;
  29.         info.cbSize = sizeof(info);
  30.         SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(info), &info, 0);
  31.         hGlobalFont = CreateFontIndirect(&info.lfMessageFont);
  32.         return hGlobalFont;
  33. }
  34. BOOL CALLBACK setWndFont(HWND itemHwnd, LPARAM lParam)
  35. {
  36.         SendMessage(itemHwnd, WM_SETFONT, (WPARAM)hGlobalFont, MAKELPARAM(FALSE, 0));
  37.         return TRUE;
  38. }


 
 
1/ Je cree mes deux fenetres
2/ Je recupere la police systeme -> GetWndFont()
3/ Je l'envoie a tous mes controles -> EnumChildWindows()
 
Je pense qu'il y a quelque chose qui n'est pas fait dans le bon ordre ou je sais pas!


Message édité par theclem35 le 27-03-2011 à 00:38:59
Reply

Marsh Posté le 27-03-2011 à 00:36:22   

Reply

Marsh Posté le 28-03-2011 à 22:21:58    

Pour récupérer la police système c'est :

Code :
  1. HFONT GetWndFont(HFONT hGlobalFont)
  2. {
  3.    return GetStockObject(DEFAULT_GUI_FONT);
  4. }


 
Pas besoin de faire un DeleteObject sur la valeur de retour. Si tu veux adapter la police (genre garder la même taille, mais changer l'apparence comme gras/italic/souligné), utilise la fonction GetObject() + CreateFontIndirect().

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed