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

Winapi MFC:从控件代码本身限制子控件的大小,winapi,mfc,Winapi,Mfc,比如说,我有一个CListCtrl派生的控件。我希望它始终是方形的(即,它的宽度和高度应始终相等) 控件驻留在对话框上(基于CDialog),一旦调整对话框的大小,就会调整其大小(使用SetWindowPos()调整控件的大小)。我想要实现的是不可能不正确地调整控件的大小:无论传递给SetWindowPos的是什么,控件的水平和垂直尺寸必须始终相等 当然,我可以控制传递给SetWindowPos的值。问题是:是否可以在控件本身的代码中控制CListCtrl派生控件的大小?如果将控件子类化并使其处

比如说,我有一个CListCtrl派生的控件。我希望它始终是方形的(即,它的宽度和高度应始终相等)

控件驻留在对话框上(基于CDialog),一旦调整对话框的大小,就会调整其大小(使用SetWindowPos()调整控件的大小)。我想要实现的是不可能不正确地调整控件的大小:无论传递给SetWindowPos的是什么,控件的水平和垂直尺寸必须始终相等


当然,我可以控制传递给SetWindowPos的值。问题是:是否可以在控件本身的代码中控制CListCtrl派生控件的大小?

如果将控件子类化并使其处理,则可以按任何方式约束调整大小。只需修改消息传递的
RECT
结构。

在MFC中,转到资源编辑器,右键单击控件。属性部分将显示“动态布局”。将“尺寸类型”设置为“两者”。这将在调整主对话框的大小时按比例调整子控件的大小。为什么不首先使用适当的值调用
SetWindowPos()
?@Barmak Shemirani:这不会起作用,控件最初可能是方形的,但在调整大小的过程中它会变成矩形(无论是否按比例)因为显示器屏幕不是正方形的。@Jabberwocky:我希望控件能够防止自己不成正方形,这就是它的任务。我特别提到了我可以预处理SetWindowPos()的值,如果这可以做到这一点,这是毫无疑问的。很好的提示,我可以通过WM_WindowPos更改处理来实现我所需要的。。。由于某些原因,我的控件未接收WM_大小调整。为什么WM_尺寸可能无法控制?@Roman感谢您的反馈。当窗口被边缘拖拽时,可能只会得到
WM_size
。在您的例子中,它显然是由父对话框控制的?控件的大小通过父对话框的WM_大小处理程序进行的显式SetWindowPos()调用进行更改。因此,控件的大小不会以拖动边的“自然”方式更改。