Вы можете использовать класс 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)
в своем классе и обновите вручную размер элемента управления.