查询Windows的颜色和外观

时间:2016-02-09 09:37:07

标签: c winapi fonts

我正在OpenGL中编写一个小型GUI库,以获得乐趣和利润。说到字体处理,到目前为止,我要求客户端应用程序显式加载所有字体并在窗口小部件上设置它们。到目前为止,这是可以的,我还有一种方法可以将它们设置为某种类型的所有小部件的默认值。

虽然这是可行的,但是,我不会将系统的默认字体用作默认字体。对于Windows,这将是通过颜色和外观对话框配置的字体。

在升温了我生锈的Win32编程知识并且厌恶MSDN后,我找不到这个问题的灵感。我可以按名称加载字体并将其设置在任何窗口小部件上,但是确定Win32将使用哪种字体作为默认设置会使我失望。

到目前为止,我找到的最好的是SystemParametersInfo函数SPI_GETNONCLIENTMETRICS。但这些只是“非客户”区域的设置,例如窗口标题栏等。

1 个答案:

答案 0 :(得分:1)

DEFAULT_GUI_FONT 您的解决方案。这个名字听起来确实不错,实际上在历史的某个时刻是默认的GUI字体,但这种字体多年来一直没用过。

您已经偶然发现了正确的解决方案:使用SystemParametersInfo选项调用SPI_GETNONCLIENTMETRICS。这将填充NONCLIENTMETRICS结构,其中包含有关标准系统字体的信息。

该结构中的“标准UI字体”称为lfMessageFont。它是用于消息框,对话框以及Windows客户区其他地方的文本的文本。它与“外观”属性中可配置的相同。

我写了a very detailed answer about fonts in Windows applications a few years ago。那种关注MFC,所以我选择不将这个问题标记为另一个问题的复制品并撰写单独的答案,但实际上你需要的所有信息都在那里。

为了好玩,我会通过调用GetSysColor function来获取系统颜色。传递其中一个COLOR_*值以指示您想要的颜色;你将获得一个COLORREF值(typedefed为32位无符号整数,其中包含颜色的红色,绿色和蓝色分量值)。使用GetRValueGetGValueGetBValue宏来提取各个组件;我怀疑OpenGL需要COLORREF值。