Win32 API: CreateFont/SelectObject 无法在另一台计算机上正确呈现文本

Win32 API: CreateFont/SelectObject not rendering text properly on a different computer

我在 Visual Studio 上克隆并调整了 Open-Shell 的一个版本,并使用他们的 makefile 将其编译成安装程序。更具体地说,我想将 'All Programs' 文本按钮设为粗体:

为此,我在第 2336 行的 Src/StartMenu/StartMenuDLL/MenuPaint.cpp 中调用了 CreateFont(每次打开开始菜单时都会调用):

CString name = s_MenuMode == MODE_PROGRAMS ? FindTranslation(L"Menu.Back", L"Back") : FindTranslation(L"Menu.AllPrograms", L"All Programs"); // String is 'All Programs' or 'Back', both of which I want bold

HFONT hFont = CreateFont(32, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,
        CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, VARIABLE_PITCH, L"Segoe UI");

SelectObject(hdc, hFont); // Selects the font into the device context for drawing the text

在代码的更下方,调用了 DrawText 来显示文本。

将项目编译到安装程序后,我在进行更改的桌面和干净的虚拟机上都安装了该程序,它可以运行:

但是,当我 运行 在我的笔记本电脑上安装程序时,对文本的更改没有应用。

我测试了 CreateFontSelectObject 并且这些 return 在任何机器上都没有任何错误。虚拟机和笔记本电脑都是 运行ning Windows 21H1 所以我认为这不是 Windows 版本问题。

我有点不知道是什么原因造成的。我以前从未玩过 Windows API。我缺少图书馆吗?提前致谢!

事实证明代码在我的笔记本电脑上确实有效。但是,另一个程序是 interfering/overriding 字体设置(在本例中为 WindowBlinds 10)。

我的方法仍然不理想(如Vlad Feinstein所述),但我希望它能有所帮助。