Определить системный шрифт Windows

Что такое вызов Win32 API для определения общесистемного шрифта (в частности, цвета), скажем, для меню.

Это было бы равносильно переходу в Настройки внешнего вида - Дополнительно - и затем к выбору пункта "Меню".

Я могу использовать GetSysColor, чтобы найти цвета различных общесистемных элементов окна, но не могу найти эквивалент для шрифтов.

3 ответа

Решение

GetSysColor(COLOR_MENUTEXT) дает вам цвет шрифта меню.

SystemParametersInfo Позволит вам восстановить некоторую информацию о шрифте, аналогично GetStockObject для рисования в контексте устройства.

Но системный шрифт (вероятно) - либо Tahoma (на XP/W2K), либо MS Sans Serif, в зависимости от того, как вы настроили диалог.

См. http://blogs.msdn.com/oldnewthing/archive/2005/02/04/366987.aspx для получения дополнительной информации.

Ты можешь использовать SystemParametersInfo найти эти шрифты:

SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ...) возвращает NONCLIENTMETRICS структура, содержащая LOGFONT структуры для:

  • lfCaptionFont - шрифт, используемый как для "активной строки заголовка", так и для "неактивной строки заголовка"
  • lfSmCaptionFont - шрифт, используемый для небольших строк заголовка, "Название палитры"
  • lfMenuFont - шрифт, используемый в строках меню.
  • lfStatusFont - шрифт, используемый в строке состояния и подсказках
  • lfMessageFont - шрифт, используемый в окнах сообщений.

SystemParametersInfo(SPI_GETICONTITLELOGFONT, ...) возвращает LOGFONT структура для текста, сопровождающего иконки.


В C# / .NET вы можете использовать System.System.Drawing.SystemFonts класс (WinForms) или System.Windows.SystemFonts класс (WPF).

В C# есть Control.DefaultFont, а для нативного доступа этот блог описывает вызов win32 API для его получения. Вызов API - это SystemParametersInfo().

Другие вопросы по тегам