You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win32 API CreateFont/SelectObject跨设备文本渲染异常问题咨询

问题描述

我在Visual Studio中克隆并修改了Open-Shell项目,使用项目自带的makefile编译生成安装包,需求是将开始菜单的「All Programs」文本按钮设置为粗体。
需求示意图

实现代码

为了实现该效果,我在每次打开开始菜单都会调用的Src/StartMenu/StartMenuDLL/MenuPaint.cpp文件第2336行调用CreateFont接口,相关代码如下:

CString name = s_MenuMode == MODE_PROGRAMS ? FindTranslation(L"Menu.Back", L"Back") : FindTranslation(L"Menu.AllPrograms", L"All Programs"); // 字符串为"All Programs"或"Back",两处文本都需要设置为粗体

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); // 将字体选入设备上下文,用于后续文本绘制

代码后续会调用DrawText接口完成文本绘制。

问题现象

编译生成的安装包在开发用桌面、干净的Windows 21H1虚拟机上运行均正常,粗体效果可以正常生效:
生效效果图
但在同样运行Windows 21H1的笔记本上安装后,样式修改未生效。我已经核查过CreateFont、SelectObject在所有设备上调用都没有报错,我此前没有Windows API开发经验,想确认是否是缺少依赖库导致?还有哪些可行的排查方向?


内容的提问来源于stack exchange,提问作者symbolads

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:09:02