如何在 CMDIFramewndEx 中设置 m_wndClientArea 的最小尺寸?

Posted

技术标签:

【中文标题】如何在 CMDIFramewndEx 中设置 m_wndClientArea 的最小尺寸?【英文标题】:How to set minimum size for m_wndClientArea in CMDIFramewndEx? 【发布时间】:2017-05-29 06:54:07 【问题描述】:

这是视觉工作室屏幕。

当将 visualstudio 屏幕调整到最小时,选项卡式文档视图、左右对话框窗格会以某个最小尺寸显示。

调整大小后,如果我通过拖动将屏幕大小调整到最大,它会变成这样。

而在我的应用程序中,它是一个使用 MFC 功能包创建的 MDI 选项卡式组应用程序。

当调整到最小值时,选项卡式文档和右侧窗格的大小将调整为零宽度。对于右侧窗格,我使用 SetMinSize() 将最小大小设置为 100。

调整大小后,如果我通过拖动将屏幕大小调整到最大,则不会显示右窗格。

我想,要实现这一点,我们需要为 CMDIFramewndEx 的 m_wndClientArea 或 CDockingManager 的 m_rectClientAreaBounds 设置最小大小。

如何做到这一点?

如果您有任何其他解决方案,请建议我。

谢谢

【问题讨论】:

我们不知道CMFCFramewndExm_wndClientArea 是什么。需要更多的勤奋,以及清晰的问题陈述。 请详细说明,可能有图片。就目前而言,您的问题尚不清楚。 请不要发布代码的图片,而是发布代码。 【参考方案1】:

为了限制窗口的最小尺寸,您必须处理 WM_GETMINMAXINFO 消息: 在标题中:

afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);

在 cpp 中:

ON_WM_GETMINMAXINFO()

void CChildFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 

// TODO: Add your message handler code here and/or call default

lpMMI->ptMinTrackSize.x = 100;
lpMMI->ptMinTrackSize.y = 200;

CMDIChildWnd::OnGetMinMaxInfo(lpMMI);

【讨论】:

您好 flaviu2,感谢您的回复。我已经尝试过您的解决方案。它仅在级联模式下工作。我的应用程序在左侧和右侧有带有可停靠窗格的 MDItabbedGroups,因此此解决方案不起作用。 为什么还要调用基类实现呢?看看documentation。 嗨 IInspectable,是的。对于应用程序窗口,框架设置了一些最小宽度,但如果我调整可停靠窗格和选项卡组区域的大小,它也允许零宽度。 对于可停靠窗格,我可以通过覆盖 CDockablePane 派生类中的 OnGetMinMaxInfo 来设置最小宽度,但对于 tabbedgrouparea,我不知道如何设置最小宽度 一种可能的解决方法是限制 CMainFrame 的大小,以便完全不缩小右窗格 ...

以上是关于如何在 CMDIFramewndEx 中设置 m_wndClientArea 的最小尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

安装jdk1.5.0_18。在catalina.sh中设置环境变量

如何在 1:m 关系中设置默认值,Django 中 user_auth_model 的外键

如何在 Laravel 中设置全局变量?

37如何在函数中设置一个全局变量 ?

如何使用 pyside 在 QtableView 单元格中设置数据

如何在 PyCharm 中设置 Python 代码模板