Шаг 42 - Пробуем CDaoDialog

Итак, мы сделали довольно много работы для того, чтобы жизнь стала легче. Давайте посмотрим, как можно применить наши классы в проекте. Мы сделаем проект с такой структурой.

42_1.gif (6578 b)

По нажатию на кнопки должен появляться соответствующий диалог. Наша задача посмотреть как приято наследовать что то, а точнее наш класс CDaoDialog. Создаем проект на основе диалогового окна с именем TestDialog. Добавляем в наш проект два диалога из шаблона IDD_DIALOG_DAO и на основе этих шаблонов делаем два класса. Имена на схеме. Добавляем из компонентов CDaoDialog и CDaoNavigator. CDaoDialog наследуется от CDialog, а мы поменяет на CDaoDialog.

////////////////////////
// CDialogCar dialog

#include "DaoDialog.h" 

class CDialogCar : public CDaoDialog
{
// Construction
public:
	......
};

......
CDialogCar::CDialogCar(CWnd* pParent /*=NULL*/)
	: CDaoDialog(CDialogCar::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialogCar)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}
......

То же самое надо сделать для класса CDialogDriver. То же самое надо сделать для класса CDialogDriver. Теперь надо создать два класса Set. Используя ClassWizard. Имена в таблице выше. Добавляем их к классу диалога как Foreign class именем m_pSet. Давайте инициализируем набор записей для CDialogCar.

CDialogCar::CDialogCar(CWnd* pParent /*=NULL*/)
	: CDaoDialog(CDialogCar::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialogCar)
	m_pSet = NULL;
	//}}AFX_DATA_INIT
	m_pSet=new CCarSet();
	m_pSet->Open(); 
	SetRecorset(m_pSet);
}

......

void CDialogCar::OnDestroy() 
{
	CDialog::OnDestroy();
	delete m_pSet;	
}

Реакция на нажатие кнопок на диалоге.

void CDialogCar::OnButtonFirst() 
{
	First();
}

void CDialogCar::OnButtonPrev() 
{
	Prev();
}

void CDialogCar::OnButtonNext() 
{
	Next();
}

void CDialogCar::OnButtonLast() 
{
	Last();
}

Все один к одному для CDialogDriver. Код нажатия на кнопки.

#include "DialogCar.h"
#include "DialogDriver.h"
......

void CTestDialogDlg::OnButtonDriver() 
{
	CDialogDriver cd;
	cd.DoModal(); 
}

void CTestDialogDlg::OnButtonCar() 
{
	CDialogCar cd;
	cd.DoModal(); 
}

Осталось только расставить и связать элементы управления на диалоговых окнах. Можно было еще сократить код договорившись, что набор записей всегда будет m_pSet. Пробуйте. В проекте готовое приложение. Самое главное в этом шаге посмотреть, что VC++ не так плох для баз данных. Что буквально несколько дополнительных классов и скорость разработки приложения будет не меньше чем на VB или Delphi. В следующих шагах мы сделаем еще несколько классов, и все станет еще приятнее. Но зато то чувство контроля и полной свободы не подарит Вам не один язык программирования кроме С++.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.08.2001