Wizard можно сделать и по другому. Есть стандартный способ используя CPropertySheet. Мы это способ посмотрим далее. А пока сами, все сами. Итак, нам нужны четыре диалоговых окна в ресурсах. Сделаем их.
С этих диалогов удалим кнопку OK, а добавим кнопки NEXT и PREV с одинаковыми идентификаторами на каждом диалоге.
На первом естественно не нужна PREV, а на последнем NEXT. Работу эту можно облегчить. Сначала сделайте две кнопки на диалоге. Присвойте им идентификаторы. А потом пользуясь Edit – Copy – Paste скопируйте их на другие диалоги. При нажатии на эти кнопки диалог будет закрываться и возвращать код нажатой кнопки. Для автоматизации этой задачи создадим базовый класс.
Вот его описание
class CBaseWiz : public CDialog { // Construction public: CBaseWiz(UINT idd,CWnd* pParent = NULL); // standard constructor afx_msg void OnButtonPrev(); afx_msg void OnButtonNext(); // Dialog Data //{{AFX_DATA(CBaseWiz) enum { IDD = 0 }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CBaseWiz) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CBaseWiz) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() };
И реализация.
СBaseWiz::CBaseWiz(UINT idd,CWnd* pParent /*=NULL*/) : CDialog(idd, pParent) { //{{AFX_DATA_INIT(CBaseWiz) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CBaseWiz::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CBaseWiz) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CBaseWiz, CDialog) //{{AFX_MSG_MAP(CBaseWiz) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext) ON_BN_CLICKED(IDC_BUTTON_PREV, OnButtonPrev) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBaseWiz message handlers void CBaseWiz::OnButtonPrev() { EndDialog(IDC_BUTTON_PREV); } void CBaseWiz::OnButtonNext() { EndDialog(IDC_BUTTON_NEXT); }
В нем мы предусмотрели уже предусмотрели что на диалоге есть стандартные элементы управления и реакцию на них. Теперь для каждого диалога создадим соответствующий класс. Эти классы должен быть наследником CBaseWiz.