Поделиться через


Диалоговое окно "Шрифт"

Диалоговое окно Шрифт позволяет пользователю выбрать атрибуты для логического шрифта, такие как семейство шрифтов и связанный стиль шрифта, размер точки, эффекты (подчеркивание, зачеркивка и цвет текста), а также скрипт (или набор символов).

Диалоговое окно Шрифт создается и отображается путем инициализации структуры CHOOSEFONT и передачи структуры в функцию ChooseFont .

На следующем снимке экрана показано типичное диалоговое окно Шрифт .

Снимок экрана: диалоговое окно шрифта

Если пользователь нажимает кнопку ОК , функция ChooseFont возвращает значение TRUE и задает сведения о выборе пользователя в структуре CHOOSEFONT .

Если пользователь отменяет диалоговое окно Шрифт или возникает ошибка, функция ChooseFont возвращает значение FALSE , а содержимое структуры LOGFONT не определено. Причину ошибки можно определить с помощью функции CommDlgExtendedError для получения расширенного значения ошибки.

В этом разделе рассматриваются следующие темы.

Флаги инициализации диалогового окна шрифта

Перед вызовом ChooseFont в элементе Flags структуры CHOOSEFONT необходимо указать CF_SCREENFONTS, CF_PRINTERFONTS или CF_BOTH, чтобы указать, должны ли в диалоговом окне отображаться шрифты экрана, шрифты принтера или и то, и другое. Если вы указываете CF_PRINTERFONTS или CF_BOTH, член HDC структуры CHOOSEFONT должен указывать дескриптор для контекста устройства для принтера.

Если установлен флаг CF_PRINTERFONTS или CF_BOTH , метка описания типа шрифта отображается в нижней части диалогового окна Шрифт .

Начиная с Windows 7 флаги CF_PRINTERFONTS, CF_SCREENFONTS, CF_BOTH и CF_WYSIWYG больше не используются функцией ChooseFont для перечисления шрифтов. Они устарели в Windows 7. Однако флаг CF_PRINTERFONTS сохраняет одну функцию: для отображения метки описания типа шрифта в нижней части диалогового окна Шрифт .

Элемент Flags можно использовать для включения или отключения некоторых элементов управления диалогового окна Шрифт , а элемент Flags можно использовать вместе с другими элементами CHOOSEFONT для управления начальными значениями некоторых элементов управления.

Чтобы отобразить элементы управления, позволяющие пользователю выбирать параметры зачеркивать, подчеркивания и цвета, выполните следующие действия:

  • Установите флаг CF_EFFECTS . Для указания начального цвета шрифта можно использовать элемент rgbColors структуры CHOOSEFONT .

Чтобы указать начальные значения для элементов управления "Шрифт", "Стиль шрифта", "Размер", "Зачеркивка" и "Подчеркивание", выполните следующие действия.

  1. Чтобы указать начальные значения для элементов управления "Шрифт", "Стиль шрифта", "Размер", "Зачеркивка" и "Подчеркивание", выполните следующие действия.
  2. Задайте флаг CF_INITTOLOGFONTSTRUCT в элементе Flags вместе с элементами структуры LOGFONT , на которую указывает lpLogFont, чтобы указать начальные значения атрибутов шрифта.
  3. Вы также можете использовать флаги CF_NOFACESEL, CF_NOSTYLESEL и CF_NOSIZESEL , чтобы предотвратить отображение начальных значений соответствующих элементов управления в диалоговом окне Шрифт . Это полезно при работе с выделенным текстом с несколькими шрифтами, стилем или размером точек. Эти значения также будут заданы в разделе Флаги при возврате функции ChooseFont , если пользователь не выбрал соответствующее значение.

Инициализация элемента управления "Стиль шрифта" с указанным именем стиля

  • Установите флаг CF_USESTYLE и укажите имя стиля с помощью элемента lpszStyle .

Примечание

Для глобализации приложения укажите стиль с помощью элементов lfWeight и lfItalic структуры LOGFONT , на которую указывает lpLogFont. Имя стиля может меняться в зависимости от языка пользовательского интерфейса системы.

 

Отображение кнопки "Применить"

  • Установите флаг CF_APPLY и укажите процедуру перехватчика для обработки WM_COMMAND сообщений для кнопки Применить . Процедура перехватчика может отправить сообщение WM_CHOOSEFONT_GETLOGFONT в диалоговое окно, чтобы получить адрес структуры LOGFONT , содержащей текущие выбранные параметры шрифта.

Отображение кнопки "Справка"

  • Установите флаг CF_SHOWHELP . Участник hwndOwner должен определить окно для получения зарегистрированного сообщения HELPMSGSTRING , когда пользователь нажимает кнопку Справка .

Ограничение шрифтов, отображаемых в диалоговом окне

  • Задайте любое сочетание флагов CF_TTONLY, CF_FIXEDPITCHONLY, CF_NOVECTORFONTS, CF_NOVERTFONTS, CF_SCALABLEONLY и CF_WYSIWYG . Вы также можете ограничить доступные стили, отображаемые в диалоговом окне для некоторых шрифтов, с помощью значения CF_NOSIMULATIONS .

Начиная с Windows 7 список шрифтов, отображаемых в диалоговом окне, ограничивается в зависимости от отображаемых пользователем шрифтов. Чтобы снять ограничение, установите флаг CF_INACTIVEFONTS .

Ограничение имен шрифтов, стилей и размеров точек, которые пользователь может указать

  1. Установите флаг CF_FORCEFONTEXIST , чтобы ограничить пользователя указанием только допустимых имен шрифтов, стилей и размеров точек, перечисленных в диалоговом окне.
  2. Установите флаг CF_LIMITSIZE , чтобы ограничить пользователя указанием размеров точек в диапазоне, заданном элементами nSizeMin и nSizeMax .

Ограничение или отключение поля со списком "Скрипты"

  • Установите флаг CF_NOSCRIPTSEL , чтобы отключить поле со списком Скрипты , или установите флаг CF_SELECTSCRIPT , чтобы ограничить выбор в поле Со списком Скрипты указанным набором символов.

Настройка диалогового окна "Шрифт" в более ранних версиях Windows

Вы можете предоставить настраиваемый шаблон для диалогового окна Шрифт , например, если вы хотите включить дополнительные элементы управления, которые являются уникальными для вашего приложения. Функция ChooseFont использует пользовательский шаблон вместо шаблона по умолчанию.

Предоставление пользовательского шаблона для диалогового окна "Шрифт"

  1. Создайте пользовательский шаблон, изменив шаблон по умолчанию, указанный в файле Font.dlg. Идентификаторы элементов управления, используемые в шаблоне диалогового окна Шрифт по умолчанию, определяются в файле Dlgs.h.
  2. Используйте структуру CHOOSEFONT , чтобы включить шаблон следующим образом:
    • Если настраиваемый шаблон является ресурсом в приложении или библиотеке динамической компоновки, установите флаг CF_ENABLETEMPLATE в элементе Flags . Используйте элементы hInstance и lpTemplateName структуры для идентификации модуля и имени ресурса.
    • Если пользовательский шаблон уже находится в памяти, установите флаг CF_ENABLETEMPLATEHANDLE . Используйте элемент hInstance для идентификации объекта памяти, содержащего шаблон.

Вы можете указать процедуру перехватчика CFHookProc для диалогового окна Шрифт . Процедура перехватчика может обрабатывать сообщения, отправленные в диалоговое окно, и отправлять сообщения в диалоговое окно. Если вы используете пользовательский шаблон для определения дополнительных элементов управления, необходимо предоставить процедуру перехватчика для обработки входных данных для элементов управления.

Включение процедуры перехватчика для диалогового окна Шрифт

  1. Установите флаг CF_ENABLEHOOK в элементе Flags структуры CHOOSEFONT .
  2. Укажите адрес процедуры перехватчика в элементе lpfnHook .

После обработки сообщения WM_INITDIALOG процедура диалогового окна отправляет WM_INITDIALOG сообщение в процедуру перехватчика. Параметр lParam этого сообщения является указателем на структуру CHOOSEFONT , которая используется для инициализации диалогового окна.

Процедура перехватчика может отправлять сообщения WM_CHOOSEFONT_GETLOGFONT, WM_CHOOSEFONT_SETLOGFONT и WM_CHOOSEFONT_SETFLAGS в диалоговое окно, чтобы получить и задать текущие значения и флаги диалогового окна.

Настройка диалогового окна "Шрифт" в Windows 7

На следующем снимке экрана показано типичное диалоговое окно Шрифт в Windows 7.

Снимок экрана, показывающий поле dialob шрифта

В более ранних версиях Windows файл шаблона font.dlg содержит один шаблон по умолчанию ChooseFont. Файл шаблона font.dlg в Windows 7 содержит два шаблона по умолчанию: шаблон по умолчанию из более ранних версий Windows и новый шаблон Windows 7 ChooseFont. Поэтому при настройке диалогового окна Шрифт в Windows 7 необходимо учитывать следующие проблемы.

  1. Используйте новый шаблон при создании пользовательских шаблонов для приложений, работающих в Windows 7. Этот новый шаблон содержит элемент управления ссылкой, который пользователь может щелкнуть, чтобы открыть окно Шрифты панель управления, как показано на следующем снимке экрана.

    Снимок экрана: панель управления шрифтами в Windows 7

  2. Чтобы использовать этот элемент управления связью, вызывающее приложение должно использовать COMCTL32.DLL версии 6 или более поздней. В противном случае функция ChooseFont возвращает ошибку при попытке создать элемент управления связью в пользовательском шаблоне. Чтобы определить, включен ли этот элемент управления, скомпилируйте вызывающее приложение для COMCTL32.DLL версии 6.0. Дополнительные сведения см. в разделе Включение визуальных стилей с помощью общих элементов управления.

  3. Если приложение использует COMCTL32.DLL версии 5.0 или более ранней, при создании пользовательского шаблона необходимо выполнить следующие действия:

    • Укажите элемент управления в виде кнопки PUSHBUTTON. Элемент управления, используемый для запуска панель управления Шрифты, будет отображаться в виде кнопки, а не ссылки.

    • Замените следующий текст в файле font.dlg:

      CONTROL "<A>Show more fonts</A>", IDC_MANAGE_LINK, "SysLink", WS_TABSTOP, 7, 199, 227, 9

      со следующим текстом:

      PUSHBUTTON "S&how more fonts", IDC_MANAGE_LINK, 7, 199, 74, 14 , WS_TABSTOP

    • Чтобы приложение использовало пользовательский шаблон, необходимо указать пользовательский шаблон с флагом CF_ENABLETEMPLATE , создать пользовательский шаблон на основе шаблона Windows 7 ChooseFont, а затем при необходимости включить процедуру перехватчика.

      Если включить процедуру перехватчика без создания пользовательского шаблона, будет загружен шаблон По умолчанию ChooseFont для более ранних версий Windows.

Примечание

В новом шаблоне необходимо указать тип элемента управления CONTROL или PUSHBUTTON в зависимости от версии COMMCTL.DLL, для которую компилируется приложение. Также обратите внимание, что определенные функции Windows 7, такие как WYSIWYG-отображение списков шрифтов и расширенных семейств, недоступны, если приложения работают в более ранних версиях операционной системы Windows.