Шаг 308 - Об объявлении классов диалогов

Есть два метода связи класса диалога с шаблоном:

Смотрим связывание на уровне объявления класса:

class CTest1 : public CDialog
{
// Construction
public:
	CTest1(CWnd* pParent = NULL);

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

CTest1::CTest1(CWnd* pParent /*=NULL*/)
	: CDialog(CTest1::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTest1)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

В данном случае идентификатор ресурса уже объявлен enum { IDD = IDD_DIALOG1 };.

При создании объекта:

class CTest2 : public CDialog
{
// Construction
public:
	CTest2(UINT nIDTemplate,CWnd* pParent = NULL); // standard constructor
// Dialog Data
	//{{AFX_DATA(CTest2)
		// NOTE: the ClassWizard will add data members here
	//}}AFX_DATA
......
};

CTest2::CTest2(UINT nIDTemplate,CWnd* pParent /*=NULL*/)
	: CDialog( nIDTemplate)
{
	//{{AFX_DATA_INIT(CTest2)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}

Давайте посмотрим чем отличаются реализации:

void CMainFrame::OnView123() 
{
	CTest1 ct1;
	CTest2 ct2(IDD_DIALOG1);

	ct1.DoModal(); 
	ct2.DoModal(); 	
}

Только тем, что при создании объекта нужно указать идентификатор диалогового окна. Но вот, что будет, если Вы хотите, чтобы класс диалога являлся членом класса, скажем, CMainFrame, то он должен быть динамическим, так как параметры нельзя указывать в классе. Вот так:

class CMainFrame : public CFrameWnd
{
	
protected: // create from serialization only
	CMainFrame();
	DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:
	CTest2* ct2;
// Operations
......
};

CMainFrame::CMainFrame()
{
	ct2= new CTest2(IDD_DIALOG1);
}

CMainFrame::~CMainFrame()
{
	delete ct2;
}

void CMainFrame::OnView123() 
{
	CTest1 ct1;
	ct1.DoModal(); 
	ct2->DoModal(); 
}

Эти различия имеют роль только для модального диалога. Для немодального диалога все равно надо вызывать функцию Create(), в которой указывается идентификатор.


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