MFC - MDI主框架标题被截断时最大化子窗口中有很长的标题(MFC - MDI main f

2019-11-01 09:51发布

我一直在使用MDI,类似于MFC涂鸦例子/教程什么的MFC应用程序。 当被最大化的子窗口,主框架窗口的标题/标题被自动调整,使得子窗口的标题被附加,如“自由曲线 - [Scribb1]”。 当子窗口的标题很长,它被截断。 整个标题的长度似乎是限制在约160个字符。 有没有增加此限制,显示出更多字符的方式? 我猜覆盖WM_NCPAINT重画的标题是一种方法,但更喜欢其他简单的解决方案,如果有一个。 我试图重写OnUpdateFrameTitle(),它似乎并没有对整个组合的字幕工作。

Answer 1:

重写OnUpdateFrameTitle并调用自己实现的UpdateFrameTitleForDocument将无法正常工作。 艾米特已经尝试过解决方案,甚至在发布之前。

这甚至不是MFC实现。 不是由MFC介绍MDI窗口。 存在的MDI框架窗口,因为我记得作为Windows操作系统的一部分。

默认MFC实现倒在MFC的肠子调用所需定义为DefFrameProc特殊MDI程序的窗口。

视窗实施某些神秘的原因截断窗口文本160个字符,包括处理WM_SETTEXT消息时终止0(MDI框架的标题栏上显示)。 这可能是没有太多的内存浪费旧电脑和所有的缓冲区大小的其馀的都保持在最低限度。

这可能是没有太多的内存浪费旧电脑和所有的缓冲区大小的其馀的都保持在最低限度和文件名分别为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);
}

现在,构建并运行。

这适用于classinc和Visual Studio风格MFC应用程序的。



Answer 2:

看看CFrameWnd的:OnUpdateFrameTitle它的内部是调用的CFrameWnd :: UpdateFrameTitleForDocument()方法。 它的魔力。 它是一个虚拟方法。 您可以在CMainFrm类中重写OnUpdateFrameTitle并根据需要设置窗口的标题。

如果你不知道,MFC库与源完全提供。 该CFrameWnd的来源是winfrm.cpp(搜索这个文件,你将学习MFC,其中源在PC上)



文章来源: MFC - MDI main frame title is truncated when maximized child window has very long title
标签: winapi mfc