Шаг 29 - Связывание класса с шаблоном диалога на этапе выполнения

Мы с Вами все как-то связывали на класс с шаблоном диалога при проектировании. Если разобрать прошлый пример, то мы увидим, что идентификатор диалога добавляется в описание класса.

class CDialog2 : public CDialog
{
// Construction
public:
	CDialog2(CWnd* pParent = NULL);   // standard constructor

	// Dialog Data
	//{{AFX_DATA(CDialog2)
	enum { IDD = IDD_DIALOG1 };
	// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA

Вот откуда класс знает, какой шаблон нужно использовать. Но можно поступить по другому. Удалим идентификатор диалога и описание конструктора.

class CDialog2 : public CDialog
{
// Construction
public:

	// Dialog Data
	//{{AFX_DATA(CDialog2)
	// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA

И изменим реализацию конструктора:

///////////////////////////////////
// CDialog2 dialog



void CDialog2::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialog2)
	// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

При создании диалога непосредственно передадим идентификатор шаблона:

void CTestDialogSdiView::OnDialogDinamic() 
{
	// TODO: Add your command handler code here
	cd2 =(CDialog2*) new CDialog(IDD_DIALOG2,NULL);
	cd2->DoModal();
	delete cd2;
}

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