MFC 应用程序标题

Posted

技术标签:

【中文标题】MFC 应用程序标题【英文标题】:MFC application title 【发布时间】:2014-04-25 21:27:14 【问题描述】:

我正在使用 MFC 创建一个简单的时钟应用程序。我的应用程序标题如下所示:“CLOCK - [CLOCK1]”。如何将其重置为简单的“时钟”? 仅供参考,我已启用文档视图架构。

【问题讨论】:

当我需要做这样一个简单的应用程序时,我会完全绕过 Document-View 并从一个对话框开始。 【参考方案1】:

将这个 MFC 标题覆盖:

void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)

SetWindowText(L"CLOCK");

【讨论】:

如果您有 MDI 应用程序,您可能需要覆盖 CChildFrame::OnUpdateFrameTitle() 那没用。覆盖 CMainFrame::OnUpdateFrameTitle 只会导致标题从 CLOCK - [CLOCK1] 更改为 [CLOCK1]foo,“foo”是覆盖。我仍然需要摆脱 CLOCK1。 @EdwardClements 你能告诉我如何覆盖 CMainFrame::OnUpdateFrame 吗?我在覆盖的函数中调用了 SetWindowText("CLO"),但这并没有改变任何东西。 看来你需要做更多,看我的回答 在您的文档初始化中,如果文档的标题不重要,您也可以使用SetTitle(_T(""));,因为在我看来,CLOCK1 是文档的标题。【参考方案2】:

有一个答案here,但我觉得下面的解决方案更“合适”。

除了覆盖CMainFrame::OnUpdateFrameTitle(),您还需要覆盖CMainFrame::PreCreateWindow(),如下所示:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
   cs.style &= ~FWS_ADDTOTITLE;
    return CFrameWndEx::PreCreateWindow(cs); // replace CFrameWndEx by CFrameWnd if
                                            // your CMainFrame is based on CFrameWnd

注意:最好使用AfxSetWindowText(m_hWnd, _T("foo"))而不是SetWindowText(_T("foo"))以避免过度闪烁,它会在设置窗口文本之前检查文本是否不同。

【讨论】:

【参考方案3】:

您可以在可视化编辑器中通过单击窗口并输入标题来更改它。 或者您可以在函数 OnInitDialog 中添加此代码

this->SetWindowText(L"CLOCK");

【讨论】:

根据我自己的经验,您的回答不适用于他的情况。因为他呈现的标题格式是“CLOCK - [CLOCK1]”,也就是void CFrameWnd::UpdateFrameTitleForDocument(LPCTSTR lpszDocName)输出的格式“WindowText - lpszDocName”被void CFrameWnd::OnUpdateFrameTitle(BOOL bAddToTitle)调用你的SetWindowText会被我描述的流程覆盖,所以在主框架上实现OnUpdateFrameTitle函数覆盖是要走的路。

以上是关于MFC 应用程序标题的主要内容,如果未能解决你的问题,请参考以下文章

与使用 MFC 的常规 DLL 链接时,MFC 应用程序断言失败

非 MFC 应用程序中的 MFC 对话框

使用 C++/MFC 和 C# 中的插件扩展 C++/MFC 应用程序

减小 MFC 应用程序大小

VS 2008 MFC - 删除 MFC 处理程序

比 MFC 更好的框架?