Чтение онлайн

ЖАНРЫ

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2

Фролов Григорий Вячеславович

Шрифт:

 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.

В нашем случае метод GetDocument используется, чтобы записать в переменную m_pSet (входящую в класс CDaterView) укзатель на объект m_daterSet класса CDaterSet, представляющий записи базы данных и входящий в класс документа приложения — класс CDaterDoc.

Затем вызывается метод OnInitialUpdate базового класса CRecordView.

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

Виртуальный метод DoDataExchange класса CDaterView, первоначально определен в классе CWnd. Он служит для реализации механизмов автоматического обмена данными – Dialog Data Exchange (DDX) и автоматической проверки данных – Dialog Data Validation (DDV). Мы рассматривали этот механизм в 24 томе серии “Библиотека системного программиста”:

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

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

void CDaterView::DoDataExchange(CDataExchange* pDX) {

CRecordView::DoDataExchange(pDX);

 //{{AFX_DATA_MAP(CDaterView)

 DDX_FieldText(pDX,IDC_ADDRESS, m_pSet->m_ADDRESS, m_pSet);

 DDX_FieldText(pDX,IDC_NAME, m_pSet->m_NAME, m_pSet);

 DDX_FieldText(pDX,IDC_PHONE, m_pSet->m_PHONE, m_pSet);

 DDX_FieldText(pDX,IDC_PRIORITY, m_pSet->m_PRIORITY,m_pSet);

 //}}AFX_DATA_MAP

}

Механизм автоматического обмена данными привязывает к органам управления диалоговой панели переменные или элементы данных класса диалоговой панели. Так как окно просмотра построено на основе диалоговой панели, механизм автоматического обмена данными позволяет нам выполнять обмен данными между органами управления, размещенными в окне просмотра, и элементами класса окна просмотра. Обмен данными работает в обоих направлениях.

Обмен выполняется при помощи функций DDX_FieldText. Могут также использоваться и другие функции, например, DDX_FieldRadio, DDX_FieldCheck, DDX_FieldScroll. Практически каждый тип органов управления диалоговой панели имеет собственную функцию для выполнения процедуры обмена данными.

Всем функциям DDX_FieldText, вызываевым в методе DoDataExchange класса CDaterView передаются четыре параметра.

Первый параметр содержит указатель на объект класса CDataExchange. Этот объект определяет параметры обмена, в том числе направление, в котором надо выполнить обмен данными.

Второй параметр определяет идентификатор органа управления окна просмотра, с которым выполняется обмен данными (окно просмотра доолжно быть представлено классом CRecordView). В нашем случае это идентификаторы полей IDC_ADDRESS, IDC_NAME, IDC_PHONE и IDC_PRIORITY, котоорые принадлежат шаблону диалоговой панели используемому окном просмотра.

Третий параметр содержит ссылку на элемент данных класса CDaterSet, представляющий соответствующее поле базы данных. В нашем методе в качестве этого парамтера фигурируют m_pSet->m_ADDRESS, m_pSet->m_NAME, m_pSet->m_PHONE и m_pSet->m_PRIORITY.

Четвертый параметр содержит указатель на объект класса CDaterSet, с которым выполняется обмен данными. В нашем случае для всех методов в качестве этого параметра используется указатель m_pSet.

Методы AssertValid и Dump класса CDaterView
Поделиться с друзьями: