2010-05-31 10 views
8

Al crear un control (por ejemplo, un control de edición) sobre la marcha utilizando CreateWindow, generalmente comienza con una fuente fea (negrita sans serif).Fuente "Dialog/UI" Correcta en Windows

Normalmente me limito a eso cogiendo la fuente del diálogo principal y configurándola en el control, ni siquiera puedo decir si esta es una buena idea.

¿Cómo busco "legalmente" la fuente correcta?

Respuesta

8

La forma "correcta" para conseguir la fuente utilizada en los cuadros de diálogo como cuadros de mensaje, etc. sería a través de la función 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)); 

No se olvide de destruir la fuente cuando los controles se destruyen :

::DeleteObject(font); 

se puede consultar la documentación de MSDN para NONCLIENTMETRICS y SystemParametersInfo() para ver qué otros parámetros de todo el sistema se puede recuperar.

+0

Gracias! (¡Lo estoy colocando en un CHandleRef, no hay posibilidad de olvidar una eliminación! - http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) – peterchen

Cuestiones relacionadas