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 应用程序断言失败