C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 308 - Об объявлении классов диалогов / MFC шаг за шагом / Visual C++

Шаг 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(), в которой указывается идентификатор.


| |
Автор Каев Артем.
[AD]