// 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. Опишем наиболее важные из этих методов более подробно.
Конструктор класса 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 вызывает метод PreCreateWindow базового класса CRecordView и выполняет обработку по умолчанию:
BOOL CDaterView::PreCreateWindow(CREATESTRUCT& cs) {
// TODO:
return CRecordView::PreCreateWindow(cs);
}
Метод 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 возвращает указатель m_pSet на запись базы данных:
//////////////////////////////////////////////////////////////
// Метод OnGetRecordset класса CDaterView
CRecordset* CDaterView::OnGetRecordset {
return m_pSet;
}
Метод OnInitialUpdate класса окна просмотра CDaterView первоначально определен в базовом классе CView. Этот метод вызывается MFC перед отображением окна просмотра на экране:
//////////////////////////////////////////////////////////////
// Метод OnInitialUpdate класса CDaterView
void CDaterView::OnInitialUpdate {
m_pSet = &GetDocument->m_daterSet;
CRecordView::OnInitialUpdate;
}
В момент вызова метода OnInitialUpdate окно просмотра уже связано с объектом документа приложения, поэтому можно использовать метод GetDocument.