win32 - 在按钮中使用默认按钮字体

Jas*_*lls 4 c++ winapi fonts

我正在用 C++ 创建一个小型 WinAPI 应用程序。我正在尝试使用以下代码在表单上创建一个按钮:

HWND hwndButton = CreateWindow(
    TEXT("BUTTON"),   
    TEXT("Click Here"),       
    WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,  // Styles 
    10,         
    10,         
    100,        
    30,        
    hwnd,     
    NULL,       
    (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
    NULL);     
Run Code Online (Sandbox Code Playgroud)

此代码基于 MSDN 示例。我的问题是它在按钮上使用粗体字体,如下所示:

在此输入图像描述

当我想使用这样的标准字体时:

在此输入图像描述

我的文件顶部已经有预处理器指令来启用视觉样式。

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
Run Code Online (Sandbox Code Playgroud)

我应该采取哪些步骤来使用标准系统宽字体?

谢谢

Mar*_*ram 7

GetStockObject不是检索 GUI 字体的推荐方法(它不考虑主题,并且可以为按钮、菜单等选择不同的字体)。相反,您应该使用SystemParametersInfo(请参阅的备注部分GetStockObject)。

不建议您使用此方法来获取对话框和窗口当前使用的字体。相反,使用带有 SPI_GETNONCLIENTMETRICS 参数的 SystemParametersInfo 函数来检索当前字体。SystemParametersInfo 将考虑当前主题并提供标题、菜单和消息对话框的字体信息。

NONCLIENTMETRICS metrics = {};
metrics.cbSize = sizeof(metrics);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, metrics.cbSize, &metrics, 0);

HFONT guiFont = CreateFontIndirect(&metrics.lfCaptionFont);

// When you're done with the font, don't forget to call
DeleteObject(guiFont);
Run Code Online (Sandbox Code Playgroud)