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

На нашем литературном портале можно бесплатно читать книгу Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2, Александр Фролов . Жанр: Программирование. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале fplib.ru.
Александр Фролов - Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
Название: Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2
Издательство: -
ISBN: нет данных
Год: -
Дата добавления: 6 март 2020
Количество просмотров: 409
Читать онлайн

Помощь проекту

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

Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT. Часть 2 - читать бесплатно онлайн , автор Александр Фролов

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

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

Методы AssertValid и Dump класса CDaterView

Методы AssertValid и Dump класса CDaterView могут использоваться при отладке приложения.

Класс записи базы данных – CDaterDoc

Центральным классом приложений, которые взаимодействуют с базами данных через драйвера ODBC, является класс, наследованный от базового класса CRecordset. В нашем приложении в качестве этого класса выступает класс CDaterSet:

class CDaterSet : public CRecordset {

public:

 CDaterSet(CDatabase* pDatabase = NULL);

 DECLARE_DYNAMIC(CDaterSet)


// Field/Param Data

 //{{AFX_FIELD(CDaterSet, CRecordset)

 CString m_NAME;

 CString m_ADDRESS;

 long m_PRIORITY;

 CString m_PHONE;

 //}}AFX_FIELD


// Overrides

 //{{AFX_VIRTUAL(CDaterSet)

public:

 virtual CString GetDefaultConnect();

 virtual CString GetDefaultSQL();

 virtual void DoFieldExchange(CFieldExchange* pFX);

 //}}AFX_VIRTUAL


// Implementation

#ifdef _DEBUG

 virtual void AssertValid() const;

 virtual void Dump(CDumpContext& dc) const;

#endif


};

Класс CDaterSet содержит в себе переменные, представляющие поля записи базы данных. Эти переменные размещаются внутри комментариев вида //{{AFX_FIELD.

В нашем случае эти переменные называются m_NAME, m_ADDRESS, m_PRIORITY и m_PHONE. Они представляют поля NAME, ADDRESS, PRIORITY и PHONE соответственно.

В классе CDaterSet также определены конструктор класса и несколько методов – GetDefaultConnect, GetDefaultSQL, DoFieldExchange, а также AssertValid и Dump.

Конструктор класса CDaterSet

Конструктор класса CDaterSet вызывает конструктор базового класса CRecordset. В качестве параметра конструктору CDaterSet и конструктору базового класса передается указатель pdb на объект класса CDatabase, представляющий источник данных.

В приложении Dater конструктору CDaterSet параметр pdb не передается (см. класс CDaterDoc). Посмотрите описание конструктора класса CRecordset в документации Microsoft Visual C++. Если он вызывается без параметра или с параметром NULL, то конструктор автоматически создает объект класса CDatabase. С Этим объектом связывается источник данных, определенный в методе GetDefaultConnect:

CDaterSet::CDaterSet(CDatabase* pdb) : CRecordset(pdb) {

 DECLARE_DYNAMIC(CDaterSet)


// Field/Param Data

 //{{AFX_FIELD(CDaterSet, CRecordset)

 CString m_NAME;

 CString m_ADDRESS;

 long m_PRIORITY;

 CString m_PHONE;

 //}}AFX_FIELD


// Overrides

 //{{AFX_VIRTUAL(CDaterSet)

 public:

 virtual CString GetDefaultConnect();

 virtual CString GetDefaultSQL();

 virtual void DoFieldExchange(CFieldExchange* pFX);

 //}}AFX_VIRTUAL


// Implementation

#ifdef _DEBUG

 virtual void AssertValid() const;

 virtual void Dump(CDumpContext& dc) const;

#endif


};

Класс CDaterSet содержит в себе переменные, представляющие поля записи базы данных. Эти переменные размещаются внутри комментариев вида //{{AFX_FIELD.

В нашем случае эти переменные называются m_NAME, m_ADDRESS, m_PRIORITY и m_PHONE. Они представляют поля NAME, ADDRESS, PRIORITY и PHONE соответственно.

Метод GetDefaultConnect класса CDaterSet

Метод GetDefaultConnect возвращает текстовую строку, которая определяет источник данных, который будет связан с объектом CDaterSet. Эта строка формируется MFC AppWizard, при выборе вами источника данных:

CString CDaterSet::GetDefaultConnect() {

 return _T("ODBC;DSN=Address Pad");

}

Метод GetDefaultSQL класса CDaterSet

Метод GetDefaultSQL возвращает текстовую строку, которая должна содержать имя таблицы источника данных или выражение SELECT языка SQL. На основе этой таблицы или результата запроса SELECT будет сформирован набор записей для объекта CDaterSet:

CString CDaterSet::GetDefaultSQL() {

 return _T("[TextBase.txt]");

}

Метод DoFieldExchange класса CDaterSet

Метод DoFieldExchange выполняет обмен данными между элементами класса CDaterSet, представляющими поля набора записей, и источником данных:

void CDaterSet::DoFieldExchange(CFieldExchange* pFX) {

 //{{AFX_FIELD_MAP(CDaterSet)

 pFX->SetFieldType(CFieldExchange::outputColumn);

 RFX_Text(pFX, _T("[NAME]"), m_NAME);

 RFX_Text(pFX, _T("[ADDRESS]"), m_ADDRESS);

 RFX_Long(pFX, _T("[PRIORITY]"), m_PRIORITY);

 RFX_Text(pFX, _T("[PHONE]"), m_PHONE);

 //}}AFX_FIELD_MAP

}

Метод DoFieldExchange содержит блок из комментариев //{{AFX_FIELD_MAP, в котором расположены несколько методов RFX_Text, которые выполняют обмен данными между полями источника данных (в нашем случае это поля NAME,  ADDRESS, PRIORITY, PHONE) и соответствующими элементами класса CDaterSet (m_NAME, m_ADDRESS, m_PRIORITY, m_PHONE).

Вы не должны вручную исправлять программный код в блоке AFX_FIELD_MAP. Для этого надо использовать MFC ClassWizard (рис. 5.17).

Рис. 5.17. Диалоговая панель MFC ClassWizard

Методы AssertValid и Dump класса CDaterSet

Методы AssertValid и Dump класса CDaterSet могут использоваться при отладке приложения.

Ресурсы приложения Dater

В файле ресурсов приложения Dater определены меню, панель управления и таблица клавиш акселераторов IDR_MAINFRAME, шаблон диалоговой панели IDD_DATER_FORM, который используется окном просмотра и шаблон информационной панели IDD_ABOUTBOX. В файле ресурсов также расположены строковые ресурсы, описывающие строки меню, кнопки панелей управления и индикаторы панели состояния. Мы привели исходный текст файла Dater.rc в листинге 5.3.

Листинг 5.3. Файл Dater.rc

//Microsoft Developer Studio generated resource script.

//

#include "resource.h"


#define APSTUDIO_READONLY_SYMBOLS

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

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"


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

#undef APSTUDIO_READONLY_SYMBOLS


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

// English (U.S.) resources


//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)

//#ifdef _WIN32

//LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US

//#pragma code_page(1252)

//#endif //_WIN32


#ifdef APSTUDIO_INVOKED

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

//

// TEXTINCLUDE

//


1 TEXTINCLUDE DISCARDABLE

BEGIN

 "resource.h"

END


2 TEXTINCLUDE DISCARDABLE

BEGIN

 "#include ""afxres.h""rn"

 ""

END


3 TEXTINCLUDE DISCARDABLE

BEGIN

 "#define _AFX_NO_SPLITTER_RESOURCESrn"

 "#define _AFX_NO_OLE_RESOURCESrn"

 "#define _AFX_NO_TRACKER_RESOURCESrn"

 "#define _AFX_NO_PROPERTY_RESOURCESrn"

 "rn"

 "#if !defined(AFX_RESOURCE_DLL)||defined(AFX_TARG_ENU)rn"

 "#ifdef _WIN32rn"

 "LANGUAGE 9, 1rn"

 "#pragma code_page(1252)rn"

 "#endifrn"

 "#include ""res\Dater.rc2""  // non-Microsoft Visual C++

                               // edited resourcesrn"

 "#include ""afxres.rc""       // Standard componentsrn"

 "#include ""afxdb.rc""        // Database resourcesrn"

 "#endif"

END


#endif // APSTUDIO_INVOKED


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

//

// Icon

//


IDR_MAINFRAME ICON DISCARDABLE "res\Dater.ico"

IDR_DATERTYPE ICON DISCARDABLE "res\DaterDoc.ico"


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

//

// Bitmap

//


IDR_MAINFRAME   BITMAP  MOVEABLE PURE   "res\Toolbar.bmp"


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

//

// Toolbar

//


IDR_MAINFRAME TOOLBAR DISCARDABLE 16, 15

BEGIN

 BUTTON ID_EDIT_CUT

 BUTTON ID_EDIT_COPY

 BUTTON ID_EDIT_PASTE

 SEPARATOR

 BUTTON ID_FILE_PRINT

 SEPARATOR

 BUTTON ID_RECORD_FIRST

 BUTTON ID_RECORD_PREV

 BUTTON ID_RECORD_NEXT

 BUTTON ID_RECORD_LAST

 SEPARATOR

 BUTTON ID_APP_ABOUT

END


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

//

// Menu

//


IDR_MAINFRAME MENU PRELOAD DISCARDABLE

BEGIN

 POPUP "&File"

 BEGIN

  MENUITEM "E&xit", ID_APP_EXIT

 END

 POPUP "&Edit"

 BEGIN

  MENUITEM "&UndotCtrl+Z", ID_EDIT_UNDO

  MENUITEM SEPARATOR

  MENUITEM "Cu&ttCtrl+X", ID_EDIT_CUT

  MENUITEM "&CopytCtrl+C", ID_EDIT_COPY

  MENUITEM "&PastetCtrl+V", ID_EDIT_PASTE

Комментариев (0)
×