Как я могу определить шрифт для окна, созданного через CreateWindow?

Вы должны прочитать, 6.2.2.1. RFC для URI: нормализация регистра , которая гласила:

Когда URI использует компоненты общего синтаксиса, всегда применяются правила эквивалентности синтаксиса компонентов; а именно, что схема и хост не чувствительны к регистру и поэтому должны быть нормализованы в нижний регистр.

blockquote>

Получите заглавную форму внутри контроллера.

11
задан efotinis 17 November 2008 в 21:30
поделиться

3 ответа

Как vividos сказал, просто используют CreateFont ()/CreateFontIndirect:

HFONT hFont = CreateFont (13, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, ANSI_CHARSET, 
      OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
      DEFAULT_PITCH | FF_DONTCARE, TEXT("Tahoma"));

И затем набор этот шрифт для Вашего окна/управления с сообщением WM_SETFONT:

SendMessage(window, WM_SETFONT, hFont, TRUE);
9
ответ дан 3 December 2019 в 03:05
поделиться

При создании собственного класса окна Вы ответственны за управление шрифтом сами. Эта задача будет иметь четыре части:

  1. Когда окно создается (т.е. когда Вы обрабатываете WM_CREATE), используйте CreateFont () или CreateFontIndirect () для получения HFONT для шрифта, который Вы хотите использовать в окне. Необходимо будет сохранить этот HFONT наряду с другими данными, которые Вы сохраняете для каждого экземпляра класса окна. Можно принять решение иметь дескриптор класса окна WM_GETFONT и WM_SETFONT также, но обычно не требуется для окон верхнего уровня (при создании класса окна управления Вы захотите обработать WM_SETFONT, так как диалоговый менеджер отправляет то сообщение).
  2. Если Ваше окно имеет какие-либо дочерние окна, которые содержат текст, отправляют каждому из них сообщение WM_SETFONT каждый раз, когда шрифт Вашего окна изменяется. Все общие средства управления Windows обрабатывают WM_SETFONT.
  3. При рисовании содержания окна (обычно в ответ на сообщение WM_PAINT), выберите HFONT в контекст устройства с SelectObject () функция прежде, чем нарисовать текст (или использовать текстовые функции такой в качестве или GetTextMetrics ()).
  4. Когда окно уничтожается (т.е. когда Вы обрабатываете WM_DESTROY), используйте DeleteObject () для выпуска шрифта, который Вы создали на шаге 1. Обратите внимание, что, если Вы принимаете решение обработать WM_SETFONT в своем окне, не удаляйте объект шрифта, который что Вы получаете в своем обработчике WM_SETFONT, поскольку код, который отправил сообщение, ожидает сохранять владение того дескриптора.
14
ответ дан 3 December 2019 в 03:05
поделиться

В случае, если Вы суперклассифицируете стандартный общий контроль, который уже имеет его собственный дескриптор шрифта, используйте этот подход: Просто создайте использование шрифта CreateFont или CreateFontIndirect и набор это использование WM_SETFONT сообщение (в MFC и ATL там было бы соответствие SetFont функция). Когда шрифт больше не будет необходим, уничтожьте использование шрифта DeleteObject. Обязательно не уничтожьте окно ранее набор шрифт.

В случае, если Вы пишете пользовательский элемент управления, который тянет себя, просто создайте новое использование объекта шрифта CreateFont или CreateFontIndirect и сохраните его в своем классе где-нибудь. Если Вы хотите поддерживать сторонних пользователей, дескриптор WM_SETFONT и WM_GETFONT позволять пользователю установить другой шрифт. При рисовании используйте объект текущего шрифта, хранивший в классе.

6
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: