Шаг 86 - Массив диалогов или Wizard своими руками.

Wizard можно сделать и по другому. Есть стандартный способ используя CPropertySheet. Мы это способ посмотрим далее. А пока сами, все сами. Итак, нам нужны четыре диалоговых окна в ресурсах. Сделаем их.

86_1.gif (1409 b)

С этих диалогов удалим кнопку OK, а добавим кнопки NEXT и PREV с одинаковыми идентификаторами на каждом диалоге.

86_2.gif (1496 b)

На первом естественно не нужна PREV, а на последнем NEXT. Работу эту можно облегчить. Сначала сделайте две кнопки на диалоге. Присвойте им идентификаторы. А потом пользуясь Edit – Copy – Paste скопируйте их на другие диалоги. При нажатии на эти кнопки диалог будет закрываться и возвращать код нажатой кнопки. Для автоматизации этой задачи создадим базовый класс.

86_3.gif (1734 b)

Вот его описание

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.

86_4.gif (1460 b)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 10.07.2002