我想知道具有更多WTL知识的人会如何创造这样的东西:
可调整大小的对话框( - > WS_THICKFRAME),其中包含两个“区域”。调整大小时,一个区域在y方向上生长,并且包含一些应该在彼此之间具有相等高度距离的组件(例如,在区域高度的0%,25%,50%,75%和100%处)。 / p>
另一个区域位于下方且高度固定。调整大小时,两个区域都应在x方向上生长。
这里的重要问题是: a)用于这两个区域的容器等 b)如何处理调整大小(DLGRESIZE_CONTROL不允许以相等的距离间隔控件,例如,afaik)
感谢。
答案 0 :(得分:2)
您可以使用CDialogResize
类。只需从类中继承这个类
窗口的定义,并定义每个控件应调整窗口大小的方式
已更新。这些调整大小级联,因此您可以以一种方式调整窗口大小,同时实现CDialogResize
。
class CFooWindow : ... public CDialogResize<CFooWindow> {
BEGIN_MSG_MAP(CFooWindow)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
... more messages here
CHAIN_MSG_MAP(CDialogResize<CFooWindow>)
END_MSG_MAP()
// This map defines how the controls within the window are resized.
// You can also use DLGRESIZE_GROUP() to group controls together.
BEGIN_DLGRESIZE_MAP(CFooWindow)
DLGRESIZE_CONTROL(IDC_WINDOW_TOP, DLSZ_SZIZE_X | DLSZ_SIZE_Y);
DLGRESIZE_CONTROL(IDC_WINDOW_BOTTOM, DLSZ_SZIZE_X | DLSZ_MOVE_Y);
END_DLGRESIZE_MAP()
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
DlgResize_Init();
}
.. the rest of your class here
}
您可以通过使用DLGRESIZE_GROUP()
并将资源文件中的控件分开来实现控件之间的间隙,就像您希望它们在最终布局中分开一样。尺寸
然后会更新这些项目。如果您需要任何太复杂的东西,可以使用对话框调整大小回调来控制项目的确切位置。只需在您的班级中实施CDlgResize::OnSize(UINT nType, int cx, int cy)
并手动更新控件的大小。
答案 1 :(得分:0)
这可以通过分离器完成。这是一个很棒的教程:http://www.codeproject.com/KB/wtl/wtl4mfc7.aspx
您可以将SPLIT_BOTTOMALIGNED设置为扩展样式,以仅调整顶部窗格的大小(底部窗格未调整大小)。