Шаг 26 - Диалог, Foreign Class и классы Recordset

В прошлых шагах мы смотрели, как удобно использовать ClassWizard вместе с диалоговым окном и объектом Set для связывание элементов управления на диалоговом окне с полями базы данных. Пора разобраться, как все это реализовано. Использование Foreign обектов расширяет механизм DDX для классов CDaoRecordset или CRecordset.

Создаем обычный проект на базе диалогового окна. Можете дать ему имя TestDAOForeign. В stdafx.h добавляем поддержку баз данных.

#include <afxdisp.h>        	// MFC Automation classes
#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
#include "afxdao.h"		// MFC support DAO
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>		// MFC support for Windows Common Controls

Создаем класс наследник от CDaoRecordset. Как это делать смотрите шаг Шаг 23.

26_1.gif (3402 b)

Описание класса набора записей нужно сделать доступным для диалогового окна.

//////////////////////////////
// CTestDAOForeignDlg dialog

#include "DaoMySet.h"

class CTestDAOForeignDlg : public CDialog
......

Теперь нам нужно перейти в ресурсы и вызваться ClassWizard для диалогового окна. Здесь на интересует вкладка Class Info для класса диалога. В низу Вы можете увидеть список выбора под именем Foreign class. Сейчас у Вас стоит None. Здесь надо выбрать наш объект наследник от набора записей. После выбора нужно указать, как будет называться переменная типа наш набор записей. И нажать OK.

26_2.gif (10289 b)

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

26_3.gif (5499 b)

В самом классе диалогового окна произошли изменения.

class CTestDAOForeignDlg : public CDialog
{
......
// Dialog Data
	//{{AFX_DATA(CTestDAOForeignDlg)
	enum { IDD = IDD_TESTDAOFOREIGN_DIALOG };
	CDaoMySet*	m_pSet;		// ссылка на класс набора записей
	//}}AFX_DATA
......
}

CTestDAOForeignDlg::CTestDAOForeignDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDAOForeignDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDAOForeignDlg)
	m_pSet = NULL;		// начальная инициализация
	//}}AFX_DATA_INIT		
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 05.08.2001