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


Установка и удаление шрифтов

Приложение может использовать шрифт для рисования текста, только если он находится на указанном устройстве или установлен в системной таблице шрифтов. Таблица шрифтов — это внутренний массив, который идентифицирует все нерабописные шрифты, доступные для приложения. Приложение может получить имена шрифтов, установленных на устройстве или хранящихся во внутренней таблице шрифтов, путем вызова функций EnumFontFamilies или ChooseFont .

Чтобы временно установить шрифт, вызовите AddFontResource или AddFontResourceEx. Эти функции загружают шрифт, хранящийся в файле font-resource. Однако это временная установка, так как после перезагрузки шрифт не будет присутствовать.

Чтобы установить шрифт, который останется после перезагрузки системы, используйте один из следующих способов:

  • Перейдите к панель управления, щелкните значок Шрифты и выберите Установить новые шрифты в меню Файл. Шрифт доступен приложению еще до перезагрузки. Однако в ситуации с сервером терминалов шрифт доступен для текущего сеанса, но недоступен для других сеансов до тех пор, пока не будет выполнена перезагрузка.
  • Скопируйте шрифт в папку %windir%\fonts. Затем перейдите к панель управления и щелкните значок Шрифты или вызовите Метод AddFontResource или AddFontResourceEx. Шрифт доступен приложению еще до перезагрузки. Однако в ситуации с сервером терминалов шрифт доступен для текущего сеанса, но недоступен для других сеансов до тех пор, пока не будет выполнена перезагрузка. Если скопировать шрифт только в папку %windir%\fonts, шрифт будет доступен только после перезагрузки системы.

Когда приложение завершает работу с установленным шрифтом, оно должно удалить этот шрифт, вызвав функцию RemoveFontResource .

Шрифт, установленный из расположения, отличного от папки %windir%\fonts, нельзя изменить при загрузке в любой активный сеанс, включая сеанс 0. Поэтому любая попытка изменить, заменить или удалить будет заблокирована. Если требуется изменение шрифта:

  • Временные шрифты загружаются только в текущем сеансе. Прежде чем пытаться изменить шрифт, вызовите Метод RemoveFontResource , чтобы выгрузить шрифт в текущем сеансе.
  • Постоянные шрифты остаются установленными после перезагрузки и загружаются всеми созданными сеансами. Вызовите Метод RemoveFontResource , чтобы принудить текущий сеанс выгрузить шрифт. Затем в разделе реестра шрифтов (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts) найдите и удалите значение реестра, связанное с шрифтом. Наконец, перезагрузите компьютер, чтобы убедиться, что шрифт не загружен ни в одном сеансе. После перезагрузки перейдите к изменению или удалению шрифта.

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