Определить системный шрифт 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().