确定Windows系统范围的字体

5

Win32 API调用是什么,可以确定系统范围内的字体(特别是颜色),比如菜单。

这相当于进入外观设置-高级-然后选择菜单作为要查看的项目。

我可以使用GetSysColor来找到各种系统范围内窗口元素的颜色,但无法找到等效的字体。

3个回答

6

您可以使用SystemParametersInfo来查找这些字体:

SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ...)返回一个包含LOGFONT结构NONCLIENTMETRICS结构,其中包括以下字体:

  • lfCaptionFont -- 用于“活动标题栏”和“非活动标题栏”的字体
  • lfSmCaptionFont -- 用于小标题栏,“调色板标题”的字体
  • lfMenuFont -- 菜单栏中使用的字体。
  • lfStatusFont -- 状态栏和工具提示中使用的字体
  • lfMessageFont -- 消息框中使用的字体。

SystemParametersInfo(SPI_GETICONTITLELOGFONT, ...) 返回一个 LOGFONT 结构,用于图标附带文本的显示。


在 C# / .NET 中,您可以使用 System.Drawing.SystemFonts(WinForms)或 System.Windows.SystemFonts(WPF)。

3

GetSysColor(COLOR_MENUTEXT) 可以获取菜单字体颜色。

SystemParametersInfo可以帮助您恢复一些字体信息,同样,GetStockObject可以用于在设备上下文中绘图。

但是系统字体(可能)是Tahoma(在XP/W2K上)或MS Sans Serif(取决于您如何设置对话框)。

详情请参见此处


SPI_GETNONCLIENTMETRICS and SPI_GETICONTITLELOGFONT seem to be the relevant keys to pass to SystemParametersInfo - CodesInChaos

0
在C#中,有Control.DefaultFont,而对于本地访问,this blog描述了获取它的win32 API调用。该API调用是SystemParametersInfo()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接