Создайте модифицированный HFONT из HFONT

Я использую API Win32 и C/С++. У меня есть HFONT и вы хотите использовать его для создания нового HFONT. Новый шрифт должен использовать те же самые показатели шрифта, за исключением того, что он должен быть полужирным. Что-то вроде:

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

"GetLogicalFont" - это недостающий API (насколько я могу судить). Есть ли другой способ сделать это? Предпочтительно что-то, что работает на Windows Mobile 5 +.

Ответ 1

Вы хотите использовать функцию GetObject.

GetObject ( hFont, sizeof(LOGFONT), &lf );

Ответ 2

Что-то вроде этого - обратите внимание, что проверка ошибок остается как упражнение для читателя.: -)

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