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

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

【问题讨论】:

  • 当我需要做这样一个简单的应用程序时,我会完全绕过 Document-View 并从一个对话框开始。

标签: mfc


【解决方案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函数覆盖是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2016-05-31
    • 1970-01-01
    • 2015-03-12
    相关资源
    最近更新 更多