调整 MFC 网格控件的大小以适应对话框?

Posted

技术标签:

【中文标题】调整 MFC 网格控件的大小以适应对话框?【英文标题】:Resize MFC grid control to fit in dialog? 【发布时间】:2017-07-03 17:22:52 【问题描述】:

我在 MFC 对话框 MyDlg(C++、VS2015、64 位 Windows 7)中创建了一个 MFC 网格控件 (Code Project MFC Grid control 2.27)。 MyDlg.h 文件包含

CGridCtrl gridCtrl;

资源编辑器用于添加MFCGridCtrl 类型的自定义控件。在MyDlg.cpp 中,我将控件子类化为

DDX_Control(pDX, IDC_ComponentRatios, gridCtrl);

MyDlg::OnInitDialog中,我用

设置了行数和列数
gridCtrl.SetColumnCount(2);
gridCtrl.SetRowCount(2);
gridCtrl.EnableWindow(TRUE);

我得到的是我期望的 2 x 2 网格,但是自定义控件的大小与网格的大小不匹配。

自定义控件的宽度是错误的,因为设置列数似乎是为滚动条留出空间,这是不必要的。

高度不变,这是错误的,因为自定义控件的大小是8行,而我在这个例子中只使用了2(实际需要的行数是可变的)。

如何让网格填充自定义控件的宽度,并调整该控件的高度以匹配?

【问题讨论】:

如果你使用 CGridCtrl 代替它有一个 ExpandColumnsToFit 方法。 如果你想调整控件本身的大小,你可以使用 SetWindowPos(),但是还有其他的事情需要考虑。它的最大尺寸应该是多少?包含对话框是否可调整大小?如果你想控制它的宽度,最小、最大、单个列的宽度应该是多少? 我使用 MoveWindow 来设置控件的整体大小。单元格的数量及其尺寸是固定的,并且在创建对话框时已知。对话框不可调整大小,但即使调整大小,控件也不会改变。 【参考方案1】:

据我了解,您希望网格调整自身大小以适应其内容?如果是这样,这不是网格控件的功能。

网格控件仅在需要时显示滚动条。不需要的空间以深灰色显示。如果确实不需要,您可以使用函数CGridCtrl::ExpandToFit 扩展列和行以删除所有滚动条。

此函数还负责所有网格单元格覆盖整个控件客户端空间。

【讨论】:

ExpandToFit 正是我所需要的。我发现控件总是为滚动条留出空间,尽管如果不需要它们,它就会变暗。而且,我正在使用 MoveWindow 来调整控件本身的大小。

以上是关于调整 MFC 网格控件的大小以适应对话框?的主要内容,如果未能解决你的问题,请参考以下文章

MFC如何使控件大小随着对话框大小自动调整

MFC:从控件本身的代码限制子控件的大小

使用 VS6 C++ GUI 编辑器、MFC 以屏幕(像素)为单位调整全屏窗口大小?

在MFC对话框中拖放

MFC 中的“调整大小”对话框

在 MFC 对话框中拖放