// Implementation

public:

 virtual ~CDaterView;

#ifdef _DEBUG

 virtual void AssertValid const;

 virtual void Dump(CDumpContext& dc) const;

#endif

protected:

 //{{AFX_MSG(CDaterView)

 //}}AFX_MSG

 DECLARE_MESSAGE_MAP

};

Помимо конструктора и деструктора в классе CDaterView определен целый ряд методов – PreCreateWindow, GetDocument, OnGetRecordset, DoDataExchange, OnInitialUpdate, а также AssertValid и Dump. Опишем наиболее важные из этих методов более подробно.

Конструктор и деструктор класса CDaterView

Конструктор класса CMainFrame вызывает конструктор базового класса CRecordView и передает ему в качестве параметра символ IDD, определенный как идентификатор шаблона диалоговой панели IDD_DATER_FORM, используемого окном просмотра.

Конструктор CMainFrame также приваивает указателю m_pSet значение NULL:

CDaterView::CDaterView : CRecordView(CDaterView::IDD) {

 //{{AFX_DATA_INIT(CDaterView)

 m_pSet = NULL;

 //}}AFX_DATA_INIT

 // TODO:

}

Деструктор класса CMainFrame не содержит программного кода:

CDaterView::~CDaterView {}

Метод PreCreateWindow класса CDaterView

Метод PreCreateWindow вызывает метод PreCreateWindow базового класса CRecordView и выполняет обработку по умолчанию:

BOOL CDaterView::PreCreateWindow(CREATESTRUCT& cs) {

 // TODO:

 return CRecordView::PreCreateWindow(cs);

}

Метод GetDocument класса CDaterView

Метод GetDocument возвращает указатель на документ, связанный с данным окном просмотра. Если окно просмотра не связано ни с каким документом, метод возвращает значение NULL.

Метод GetDocument имеет две реализации. Одна используется для отладочной версии приложения, а другая для окончательной.

Окончательная версия GetDocument определена непосредственно после самого класса окна просмотра CDaterView как встраиваемый (inline) метод. Когда вы используете страницу ClassView окна Project Workspace, чтобы просмотреть определение метода GetDocument, вы увидите именно этот код:

// Окончательная версия приложения

#ifndef _DEBUG 

inline CDaterDoc* CDaterView::GetDocument {

 return (CDaterDoc*)m_pDocument;

}

#endif

Отладочная версия GetDocument расположена в файле реализации класса окна просмотра DaterView.cpp. Откройте этот файл вручную, выбрав его название из страницы FileView окна Project Workspace:

// Отладочная версия приложения

#ifdef _DEBUG

CDaterDoc* CDaterView::GetDocument {

 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDaterDoc)));

 return (CDaterDoc*)m_pDocument;

}

#endif //_DEBUG

Макрокоманда RUNTIME_CLASS возвращает указатель на структуру CRuntimeClass, содержащую информацию о классе CDaterDoc. Метод IsKindOf, определенный в классе CObject, проверяет, принадлежит ли объект, на который указывает m_pDocument, к классу CDaterDoc или классу наследованному от CDaterDoc. Если в приложении есть ошибка и m_pDocument не указывает на документ приложения, макрокоманда ASSERT отображает соответствующее сообщение и прерывает работу приложения.

Метод OnGetRecordset класса CDaterView

Метод OnGetRecordset класса CDaterView возвращает указатель m_pSet на запись базы данных:

//////////////////////////////////////////////////////////////

// Метод OnGetRecordset класса CDaterView

CRecordset* CDaterView::OnGetRecordset {

 return m_pSet;

}

Метод OnInitialUpdate класса CDaterView

Метод OnInitialUpdate класса окна просмотра CDaterView первоначально определен в базовом классе CView. Этот метод вызывается MFC перед отображением окна просмотра на экране:

//////////////////////////////////////////////////////////////

// Метод OnInitialUpdate класса CDaterView

void CDaterView::OnInitialUpdate {

 m_pSet = &GetDocument->m_daterSet;

 CRecordView::OnInitialUpdate;

}

В момент вызова метода OnInitialUpdate окно просмотра уже связано с объектом документа приложения, поэтому можно использовать метод GetDocument.

Перейти на страницу:

Похожие книги