CDialog的标题/标题的字体样式[重复]
Posted
技术标签:
【中文标题】CDialog的标题/标题的字体样式[重复]【英文标题】:Font style of caption/title of CDialog [duplicate] 【发布时间】:2019-10-11 10:02:55 【问题描述】:我想更改对话框标题/标题的字体样式和字体大小(源自 CDialog)。由于标题/标题与任何资源 id 无关,所以我什至无法使用 SetFont().Tell
【问题讨论】:
***.com/help/how-to-ask 我建议避免“紧急”、“尽快”,我们感谢更多上下文(那是 MFC 吗?)以及您到目前为止所做的事情,失败的事情成功了。 通过与位图关联,对整个对话框进行蒙皮(不带系统边框使用),这很容易。 这绝对不容易(见上面的链接页面)。避免使用它并参考 Windows 标准样式,这是不更改对话框标题栏的一个很好的理由。 【参考方案1】:您可以创建一个执行此操作的基类,然后让您的所有对话框类都从该类派生。只要您不更改帮助 ID (m_nIDHelp),它就应该适用于基类。如果没有,您可以将自己的成员变量添加到基类以保存对话框的 ID。
#include <afxpriv.h>
INT_PTR CModifyDialogDlg::DoModal()
CDialogTemplate templ;
if (!templ.Load(MAKEINTRESOURCE(m_nIDHelp))) // it could be different, but probably isn't
return -1;
templ.SetFont(_T("Comic Sans MS"), 16);
m_lpszTemplateName = NULL;
InitModalIndirect(templ.m_hTemplate);
return __super::DoModal();
【讨论】:
而且 CModifyDialogDlg 必须从 CDialog 派生?对吗? 抱歉,此尝试更改了对话框内部项的字体,但不会更改标题。 派生自 CDialog,但也可能是 CDialogEx.to,或者派生自这两者中的任何一个的另一个对话框类。【参考方案2】:对不起 - 我没有格式化评论 - 我发现的所有提示都不起作用......所以我在这里发布它作为答案:
另一个注意事项:如果你想改变对话框中项目的字体,不要参考帮助 id,而是参考资源 id。像这样:
INT_PTR CModifyDialogDlg::DoModal()
dlgtemplate.Load(m_lpszTemplateName);
dlgtemplate.SetFont(ms_DefaultFontFace, (WORD)m_LogFontHeight);
DLGTEMPLATE *pDlgTemplate = (DLGTEMPLATE*)GlobalLock(dlgtemplate.m_hTemplate);
m_lpszTemplateName = NULL;
BOOL retVal = InitModalIndirect(pDlgTemplate);
GlobalUnlock(dlgtemplate.m_hTemplate);
return __super::DoModal();
【讨论】:
以上是关于CDialog的标题/标题的字体样式[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 uipickerview 标题文本中的字体样式? [复制]