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

如何修改对话框窗口中指定静态文本控件的字体粗细?

修改Static Text控件的字体粗细

你的代码问题在于把创建的粗体字体应用给了整个对话框窗口,而非目标Static Text控件,所以无法实现需求。正确的做法是将字体应用到指定的Static Text控件上,同时建议基于控件原有字体修改粗细,避免字体其他属性(如字号、字体名)被重置为默认值。

实现步骤

  • 通过GetDlgItem获取目标Static Text控件的句柄(需要替换为你实际的控件ID,比如IDC_MY_STATIC)
  • 获取控件当前使用的字体,提取其LOGFONT结构
  • 修改LOGFONT中的lfWeight为FW_BOLD(粗体),保持其他属性不变
  • 创建新字体并应用到控件上
  • 在对话框销毁时释放创建的字体,避免内存泄漏

修改后的代码示例

INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    static HFONT hBoldFont = NULL; // 保存新字体句柄,方便后续释放

    switch (uMsg) {
    case WM_INITDIALOG:
    {
        // 获取Static Text控件句柄(替换为你的控件ID)
        HWND hStatic = GetDlgItem(hDlg, IDC_MY_STATIC);
        if (hStatic == NULL) break;

        // 获取控件原有字体
        HFONT hOldFont = (HFONT)SendMessageW(hStatic, WM_GETFONT, 0, 0);
        LOGFONT logFont = {0};
        // 提取原有字体的LOGFONT结构
        GetObjectW(hOldFont, sizeof(LOGFONT), &logFont);

        // 修改字体粗细为粗体
        logFont.lfWeight = FW_BOLD;

        // 创建新字体并应用到控件
        hBoldFont = CreateFontIndirectW(&logFont);
        SendMessageW(hStatic, WM_SETFONT, (WPARAM)hBoldFont, TRUE);

        return TRUE;
    }
    case WM_DESTROY:
        // 释放创建的字体,避免内存泄漏
        if (hBoldFont != NULL) {
            DeleteObject(hBoldFont);
            hBoldFont = NULL;
        }
        break;
    default:
        return FALSE;
    }
    return FALSE;
}

注意事项

  • 替换代码中的IDC_MY_STATIC为你实际的Static Text控件ID(可在对话框资源编辑器中查看)
  • 如果不需要保留原有字体的其他属性,可以直接初始化LOGFONT的所有必要字段(如lfHeight、lfFaceName),但基于原有字体修改的方式更适配对话框的默认样式
  • 必须在对话框销毁时调用DeleteObject释放创建的字体,否则会造成内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:40:37