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的标题/标题的字体样式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

设置全局字体系列[重复]

更改 iframe 内的字体 [重复]

NavigationBar 如何标题字体颜色字体样式

如何更改 uipickerview 标题文本中的字体样式? [复制]

如何应用字体真棒图标颜色-包括白色阴影而不仅仅是轮廓[重复]

获取字体系列的可用字体样式