调整 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 网格控件的大小以适应对话框?的主要内容,如果未能解决你的问题,请参考以下文章