【发布时间】:2014-04-25 21:27:14
【问题描述】:
我正在使用 MFC 创建一个简单的时钟应用程序。我的应用程序标题如下所示:“CLOCK - [CLOCK1]”。如何将其重置为简单的“时钟”? 仅供参考,我已启用文档视图架构。
【问题讨论】:
-
当我需要做这样一个简单的应用程序时,我会完全绕过 Document-View 并从一个对话框开始。
标签: mfc
我正在使用 MFC 创建一个简单的时钟应用程序。我的应用程序标题如下所示:“CLOCK - [CLOCK1]”。如何将其重置为简单的“时钟”? 仅供参考,我已启用文档视图架构。
【问题讨论】:
标签: mfc
将这个 MFC 标题覆盖:
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{
SetWindowText(L"CLOCK");
}
【讨论】:
CChildFrame::OnUpdateFrameTitle()
SetTitle(_T(""));,因为在我看来,CLOCK1 是文档的标题。
有一个答案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"))以避免过度闪烁,它会在设置窗口文本之前检查文本是否不同。
【讨论】:
您可以在可视化编辑器中通过单击窗口并输入标题来更改它。 或者您可以在函数 OnInitDialog 中添加此代码
this->SetWindowText(L"CLOCK");
【讨论】:
void CFrameWnd::UpdateFrameTitleForDocument(LPCTSTR lpszDocName)输出的格式“WindowText - lpszDocName”被void CFrameWnd::OnUpdateFrameTitle(BOOL bAddToTitle)调用你的SetWindowText会被我描述的流程覆盖,所以在主框架上实现OnUpdateFrameTitle函数覆盖是要走的路。