2010-05-31 4 views
8

Lors de la création à la volée d'un contrôle (par exemple un contrôle d'édition) à l'aide de CreateWindow, il commence généralement par une police laide (boldish sans serif).Police de dialogue/interface utilisateur "correcte" sous Windows

Habituellement, je contourne cela en saisissant la police de la boîte de dialogue du parent, et en la mettant au contrôle - je ne peux même pas dire si c'est une bonne idée. Comment puis-je "légalement" chercher la bonne police?

Répondre

8

La manière d'obtenir la police « correcte » utilisée dans les boîtes de dialogue comme des boîtes de message, etc. serait via la fonction SystemParametersInfo():

// C++ example 
NONCLIENTMETRICS metrics; 
metrics.cbSize = sizeof(NONCLIENTMETRICS); 
::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), 
    &metrics, 0); 
HFONT font = ::CreateFontIndirect(&metrics.lfMessageFont); 
::SendMessage(ctrlHWND, WM_SETFONT, (WPARAM)font, MAKELPARAM(TRUE, 0)); 

Ne pas oublier de détruire la police lorsque les contrôles sont détruits :

::DeleteObject(font); 

vous pouvez consulter la documentation MSDN pour NONCLIENTMETRICS et SystemParametersInfo() pour voir ce que d'autres paramètres à l'échelle du système, vous pouvez récupérer.

+0

Merci! (Je le mets dans un CHandleRef, aucune chance d'oublier une suppression! - http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) – peterchen

Questions connexes