2010-05-31 10 views
8

Quando si crea un controllo (ad esempio un controllo di modifica) al volo usando CreateWindow, di solito inizia con un brutto font (audace sans serif)."Correggi" il carattere della finestra di dialogo/UI su Windows

Di solito mi sono occupato di questo afferrando il carattere della finestra di dialogo genitore e impostandolo sul controllo - Non posso nemmeno dire se questa è una buona idea.

Come scaricare "legalmente" il carattere corretto?

risposta

8

Il modo "corretto" per ottenere il carattere utilizzato nella finestre di dialogo, come le finestre di messaggio, ecc sarebbe tramite la funzione 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)); 

Non dimenticate di distruggere il carattere quando i controlli vengono distrutti :

::DeleteObject(font); 

È possibile cercare la documentazione MSDN per NONCLIENTMETRICS e SystemParametersInfo() per vedere quali altri parametri a livello di sistema è possibile recuperare.

+0

Grazie! (Lo sto inserendo in un CHandleRef, nessuna possibilità di dimenticare una cancellazione! - http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) – peterchen

Problemi correlati