Как устроено приложение Dater
Список всех классов, входящих в проект Dater, а также их методов можно просмотреть в окне Project Workspace на странице ClassView (рис. 5.16).
Рис. 5.16. Окно Project Workspace, страница ClassView
В приложение Dater входят следующие классы.
Класс | Базовый класс | Назначение |
---|---|---|
CAboutDlg | CDialog | Управляет информационной диалоговой панелью About |
CDaterApp | CWinApp | Главный класс приложения |
CDaterDoc | CDocument | Представлляет документ приложения |
CDaterSet | CRecordset | Представлляет запись таблицы базы данных |
CDaterView | CRecordView | Управляет окном просмотра приложения. В этом окне отображаются записи таблицы базы данных |
CMainFrame | CFrameWnd | Главное окно приложения |
Класс CDaterApp приложения Dater не содержит в себе ничего особенного и практически не отличается от соответствующего класса однооконного приложения Single, созданного MFC AppWizard и не работающего с базами данных:
//////////////////////////////////////////////////////////////
// Класс CDaterApp
//
class CDaterApp : public CWinApp {
public:
CDaterApp;
// Overrides
//{{AFX_VIRTUAL(CDaterApp)
public:
virtual BOOL InitInstance;
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CDaterApp)
afx_msg void OnAppAbout;
//}}AFX_MSG
DECLARE_MESSAGE_MAP
};
Класс CDaterApp содержит конструктор, а также методы InitInstance и OnAppAbout.
Конструктор класса CSingleApp не выполняет никаких действий и состоит из пустого блока:
CDaterApp::CDaterApp {
// TODO:
}
Метод OnAppAbout класса CDaterApp вызывается для обработки командного сообщения с идентификатором ID_APP_ABOUT, которое посылается при выборе из меню Help строки About. Этот метод совместно с классом CAboutDlg предназначен для отображения информационной диалоговой панели About (в файле ресурсов она имеет идентификатор IDD_ABOUTBOX). Мы не будем рассматривать этот метод и класс CAboutDlg, так как они не используются для взаимодействия с базой данных.
Наибольший интерес представляет метод InitInstance класса CDaterApp, который создает шаблон документа приложения и добавляет его к списку шаблонов приложения. Кроме того, метод InitInstance разбирает командную строку приложения, загружает поддержку трехмерных органов упрпавления и выполняет еще некоторые действия:
BOOL CDaterApp::InitInstance {
#ifdef _AFXDLL
Enable3dControls;
#else
Enable3dControlsStatic;
#endif
LoadStdProfileSettings;
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME, RUNTIME_CLASS(CDaterDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CDaterView));
AddDocTemplate(pDocTemplate);
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo)) return FALSE;
return TRUE;
}
При создании шаблона документа указывается идентификатор типа документа IDR_MAINFRAME, класс документа приложения CDaterDoc, класс главного окна приложения CMainFrame и класс окна просмотра CDaterView.
В приложении определен целый ряд ресурсов с этим идентификатором – меню, панель управления, таблица акселераторов, пиктограмма и строковый ресурс. Наиболее интересны для нас сейчас меню и панель управления, так как они содержат строки и кнопки, управляющие просмотром записей базы данных.
Подробное описание метода InitInstance главного класса однооконного приложения можно получить в 24 томе серии “Библиотека системного программиста”.
Класс CMainFrame предназначен для управления главным окном приложения. Для этого класса определены конструктор, деструктор, методы PreCreateWindow, OnCreate, AssertValid и Dump. В него также входят два элемента данных m_wndToolBar и m_wndStatusBar, представляющие панель управления и панель состояния:
class CMainFrame : public CFrameWnd {
protected: