Класс диалогового окна может быть как статическим, так и динамическим. Давайте посмотрим. Создадим приложение SDI и сделаем два диалога.
Свяжем их с классами. И опишем один как статический, второй как динамический.
#endif // _MSC_VER > 1000 #include "Dialog1.h" #include "Dialog2.h" class CTestDialogSdiView : public CView { protected: // create from serialization only CTestDialogSdiView(); DECLARE_DYNCREATE(CTestDialogSdiView) CDialog1 cd1; CDialog2* cd2; // Attributes public: ........ };
А теперь два пункта меню, которые будет создавать соответствующие диалоги:
Привяжем к ним события. И посмотрим в чем разница.
///////////////////////////////////////// // CTestDialogSdiView message handlers void CTestDialogSdiView::OnDialogStatic() { cd1.DoModal(); } void CTestDialogSdiView::OnDialogDinamic() { // TODO: Add your command handler code here cd2 = new CDialog2(); cd2->DoModal(); delete cd2; }
Практически ни в чем. Но кстати это только пока. Есть разница в хранении данных. В статическом диалоге данные будут сохранены, а в динамическом данные будут удалены вместе с классом диалога.