CDialogResize
これにはクラスを使用できます。ウィンドウのクラス定義でこのクラスを継承し、ウィンドウの更新時に各コントロールのサイズを変更する方法を定義するだけです。これらはカスケードにサイズ変更されるため、 も実装する 1 つの方法でサイズ変更されるウィンドウを持つことができます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)
し、コントロールのサイズを手動で更新するだけです。