Создать модифицированный HFONT из HFONT - PullRequest
14 голосов
/ 16 декабря 2008

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

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

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

Ответы [ 2 ]

26 голосов
/ 16 декабря 2008

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

GetObject ( hFont, sizeof(LOGFONT), &lf );
9 голосов
/ 16 декабря 2008

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

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...