2008-12-16 11 views
13

Używam Win32 API i C/C++. Mam HFONT i chcę go użyć do stworzenia nowego HFONT. Nowa czcionka powinna używać dokładnie tych samych parametrów czcionki, z wyjątkiem tego, że powinna być pogrubiona. Coś jak:Utwórz zmodyfikowany HFONT z HFONT

HFONT CreateBoldFont(HFONT hFont) { 
    LOGFONT lf; 
    GetLogicalFont(hFont, &lf); 
    lf.lfWeight = FW_BOLD; 
    return CreateFontIndirect(&lf); 
} 

W „GetLogicalFont” jest brakującym API (o ile mogę powiedzieć, w każdym razie). Czy jest jakiś inny sposób na zrobienie tego? Leprably coś, co działa na Windows Mobile 5+.

Odpowiedz

8

Coś takiego - zauważ, że sprawdzanie błędów jest pozostawione ćwiczeniu dla czytelnika. :-)

static HFONT CreateBoldWindowFont(HWND window) 
{ 
    const HFONT font = (HFONT)::SendMessage(window, WM_GETFONT, 0, 0); 
    LOGFONT fontAttributes = { 0 }; 
    ::GetObject(font, sizeof(fontAttributes), &fontAttributes); 
    fontAttributes.lfWeight = FW_BOLD; 

    return ::CreateFontIndirect(&fontAttributes); 
} 

static void PlayWithBoldFont() 
{ 
    const HFONT boldFont = CreateBoldWindowFont(someWindow); 
    . 
    . // Play with it! 
    . 
    ::DeleteObject(boldFont); 
}