您可以使用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)
並手動更新控件的大小。
您可能從MFC的這個答案中得到一些見解:http://stackoverflow.com/questions/138040/how-to-create-a-resizable-cdialog-in-mfc/5739620#5739620 – 2011-05-23 20:00:35
這有點幫助,是的。仍然想知道如何處理區域/容器。 – xnor 2011-05-23 20:20:51
我發佈的代碼不會做容器,您需要單獨處理每個控件。但是你的佈局看起來並不難,上層控件按照你所說的完全移動了0%,25%等,而底層部分總是移動100%。 – 2011-05-23 20:30:04