MFC应用程序标题

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

2
当我需要做一个像那样简单的应用程序时,我完全绕过文档视图,直接从对话框开始。 - Mark Ransom
3个回答

7
把这个 MFC 标题的覆盖放进去:
void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
{
SetWindowText(L"CLOCK");
}

如果您有一个 MDI 应用程序,您可能需要重写 CChildFrame::OnUpdateFrameTitle() - Edward Clements
那没起作用。覆盖CMainFrame :: OnUpdateFrameTitle只导致标题从CLOCK - [CLOCK1]更改为[CLOCK1] foo,“foo”是覆盖。我仍然需要摆脱CLOCK1。 - Gumbly jr.
@EdwardClements 请问你能告诉我如何重写CMainFrame::OnUpdateFrame函数吗?我在重写的函数内部调用了SetWindowText("CLO"),但是没有改变任何东西。 - Gumbly jr.
看起来你需要做更多的事情,看看我的答案。 - Edward Clements
在文档初始化中,如果文档的标题不重要,您还可以执行 SetTitle(_T("")),因为CLOCK1对我来说似乎是文档的标题。 - sergiol

6
这里有一个答案(链接),但我认为以下解决方案更加“恰当”。
除了重写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")) 来避免过度闪烁,它会在设置窗口文本之前检查文本是否不同。


0
您可以通过在可视化编辑器中单击窗口并输入标题来更改它。 或者您可以在OnInitDialog函数中添加以下代码:
this->SetWindowText(L"CLOCK");

根据我的经验,你的回答不适用于他的情况。因为他提供的标题格式是“CLOCK - [CLOCK1]”,这是由void CFrameWnd::UpdateFrameTitleForDocument(LPCTSTR lpszDocName)调用的格式“WindowText-lpszDocName”输出的。你的SetWindowText将被我描述的过程所覆盖,所以在主框架上实现OnUpdateFrameTitle函数重载是正确的方法。 - sergiol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接