Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT


Класс CSingleDoc


Следующий класс который мы рассмотрим - это класс документа нашего приложения CSingleDoc. В качестве базового класса для него используется класс CDocument библиотеки MFC.

Класс CSingleDoc, несколько сложнее главного класса приложения, рассмотренного выше.

class CSingleDoc : public CDocument

{

protected:

      CSingleDoc();

      DECLARE_DYNCREATE(CSingleDoc)

// Attributes

public:

// Operations

public:

// Overrides

      //{{AFX_VIRTUAL(CSingleDoc)



public:

      virtual BOOL OnNewDocument();

      virtual void Serialize(CArchive& ar);

      //}}AFX_VIRTUAL

// Implementation

public:

      virtual ~CSingleDoc();

#ifdef _DEBUG

      virtual void AssertValid() const;

      virtual void Dump(CDumpContext& dc) const;

#endif

protected:

// Методы, предназначенные для обработки сообщений

protected:

      //{{AFX_MSG(CSingleDoc)

      //}}AFX_MSG

      DECLARE_MESSAGE_MAP()

};

Просмотрите исходные тексты приложения. Вы не обнаружите кода, который бы явно создавал объекты этого класса. Объект класса CSingleDoc создается динамически шаблоном документа, во время работы приложения. Шаблон документа также динамически создает еще два объекта - класса окна и класса окна просмотра.

Для того чтобы объекты любого класса, наследованного от базового класса CObject, в том числе и CSingleDoc, можно было создавать динамически, необходимо выполнить следующее:

  • в описании класса надо поместить макрокоманду DECLARE_DYNCREATE. В качестве параметра этой макрокоманды необходимо указать имя данного класса;
  • определить конструктор класса, который не имеет параметров;
  • разместить макрокоманду IMPLEMENT_DYNCREATE в файле реализации. Макрокоманда IMPLEMENT_DYNCREATE имеет два параметра. В первом указывается имя класса, а во втором имя его базового класса
  • MFC AppWizard автоматически выполняет все эти требования для класса документа приложения CSingleDoc, класса окна приложения CMainFrame и класса окна просмотра CSingleView.



    Содержание раздела