2010-05-31 12 views
8

Wenn Sie ein Steuerelement (z. B. ein Bearbeitungssteuerelement) im laufenden Betrieb mit CreateWindow erstellen, beginnt es normalerweise mit einer hässlichen Schrift (boldish sans serif)."Korrekte" Dialog-/UI-Schriftart unter Windows

Gewöhnlich wok ich um das, indem ich die Schriftart des Elterndialogs ergreife und es auf das Steuerelement setze - ich kann nicht einmal sagen, ob das eine gute Idee ist.

Wie bekomme ich "legal" die richtige Schriftart?

Antwort

8

Die „richtige“ Art und Weise die Schriftart in Dialogfeldern wie Meldungsfelder zu gewöhnen, etc. über die SystemParametersInfo() Funktion wäre:

// 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)); 

Vergessen Sie nicht, die Schrift zu zerstören, wenn die Kontrollen zerstört werden :

::DeleteObject(font); 

Sie können die MSDN-Dokumentation für NONCLIENTMETRICS nachschlagen und SystemParametersInfo() zu sehen, was andere systemweite Parameter können Sie abrufen.

+0

Danke! (Ich setze es in eine CHandleRef, keine Chance, eine Löschung zu vergessen! - http://www.codeproject.com/KB/stl/boostsp_handleref.aspx) – peterchen