我有一个使用MDI的MFC应用程序,类似于MFC Scribble示例/教程。当子窗口最大化时,主框架窗口的标题/标题会自动调整,以便附加子窗口的标题,例如" Scribble - [Scribb1]"。当子窗口的标题很长时,它会被截断。整个字幕的长度似乎限制在160个字符左右。有没有办法增加此限制并显示更多字符?我想重写WM_NCPAINT重绘字幕是一种方法,但如果有的话,更喜欢其他简单的解决方案。我已经尝试重写OnUpdateFrameTitle(),它似乎不适用于整个组合标题。
答案 0 :(得分:2)
重写OnUpdateFrameTitle并调用UpdateFrameTitleForDocument的自己的实现将不起作用。阿米特在发布之前就已经尝试了你的解决方案。
MFC甚至没有实现。 MFC不引入MDI窗口。 MDI框架窗口存在,因为我记得是Windows操作系统的一部分。
默认MFC实现在MFC的内部调用,根据需要调用定义为DefFrameProc的特殊MDI窗口过程。
Windows实现出于某种神秘的原因将窗口文本(显示在MDI框架的标题栏上)截断为160个字符,包括在处理WM_SETTEXT消息时终止0。这可能是旧计算机的剩余部分,它们没有太多内存可以浪费,所有缓冲区大小都保持在最低限度。
这可能是没有太多内存浪费的旧计算机的残余,并且所有缓冲区大小都保持在最低限度,文件名为8.3总共12个字符。
要满足您的要求并显示全文,您必须进行一些更改。
幸运的是,我发现改变这种行为非常简单,符合我的MEMC要求。
在主框架类中,覆盖DefWindowProcand,按如下所示更改代码:
LRESULT CMainFrame::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(WM_SETTEXT == message)
{
// if set text (called from UpdateFrameTitleForDocument)
// do not call DefWindowProc
return CWnd::DefWindowProc(message, wParam, lParam);
}
// otherwise call DefWindowProc that in turn calls DefFrameProc
return CMDIFrameWndEx::DefWindowProc(message, wParam, lParam);
}
现在构建并运行。
这适用于MFC应用程序的classinc和Visual studio样式。
答案 1 :(得分:1)
看看CFrameWnd :: OnUpdateFrameTitle,它在内部调用CFrameWnd :: UpdateFrameTitleForDocument()方法。它具有魔力。这是一种虚拟方法。您可以在CMainFrm类中覆盖OnUpdateFrameTitle并根据需要设置窗口标题。
如果您不知道,MFC库完全提供了源代码。 CFrameWnd源代码在winfrm.cpp中(搜索此文件,您将了解PC上MFC的来源)