你可以使用这个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)
在您的类中实现并手动更新控件的大小。