Мы с Вами все как-то связывали на класс с шаблоном диалога при проектировании. Если разобрать прошлый пример, то мы увидим, что идентификатор диалога добавляется в описание класса.
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; }