如何修改对话框窗口中指定静态文本控件的字体粗细?
修改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
相关产品推荐
相关产品推荐

