Проект включает в себя ряд файлов, созданных системой AppWizard (рис. 15.8):
· RGZ.cpp – основной файл приложения. В нем определены методы основного класса приложения;
· RGZ.rc – файл ресурсов. В этом файле описаны все ресурсы приложения. Сами ресурсы приложения могут быть записаны в каталоге Res, расположенном в главном каталоге проекта;
· RGZDlg.cpp – файл содержит определение методов класса CDlgDlg;
· Resource.h – файл содержит определения идентификаторов ресурсов приложения;
· RGZ.h – в этом файле перечислены другие включаемые файлы и описан главный класс приложения;
· RGZDlg.h – файл содержит описание класса главной диалоговой панели, который называется CDlgDlg. Класс CDlgDlg наследуется от базового класса CDialog, определенного в библиотеке классов MFC;
· StdAfx.h, StdAfx.cpp – использование этих файлов позволяет ускорить процесс повторного построения проекта;
· RGZ.ico – пиктограмма приложения.
Рис. 15.8. Информационное окно File/View
· RGZ.rc2 – в этом файле определены ресурсы, которые нельзя редактировать с помощью редактора ресурсов среды Visual C++;
· Readme.txt – текстовый файл, содержащий описание проекта. В нем кратко рассмотрен каждый файл, входящий в проект, перечислены классы приложения, а также представлена другая информация.
Рассмотрим более подробно содержимое файлов.
Заголовочные файлы Header files
1) Resourse.h.
// (()) NO_DEPENDENCIES
// Microsoft Visual C + + Сгенерировано включать файл.
// Используется RGZ.RC
//
#DEFINE IDR_MAINFRAME 128
#DEFINE IDM_ABOUTBOX 0x0010
#DEFINE IDD_ABOUTBOX 100
#DEFINE IDS_ABOUTBOX 101
#DEFINE IDD_RGZ_MFC_DIALOG 102
// Следующие значения являются значениями по умолчанию для новых объектов
#IFDEF APSTUDIO_INVOKED
#IFNDEF APSTUDIO_READONLY_SYMBOLS
#DEFINE _APS_NEXT_RESOURCE_VALUE 129
#DEFINE _APS_NEXT_CONTROL_VALUE 1000
#DEFINE _APS_NEXT_SYMED_VALUE 101
#DEFINE _APS_NEXT_COMMAND_VALUE 32771
#ENDIF
#ENDIF
2) RGZ.h
// RGZ.h: главный заголовочный файл для применения RGZ приложения
#if!defined(AFX_RGZ_H__22E19C91_FA8D_4796_9813_762A1CFCADCE__INCLUDED_)
#defineAFX_RGZ_H__22E19C91_FA8D_4796_9813_762A1CFCADCE__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include ‘stdafx.h’ before including this file for PCH
#endif
#include "resource.h" // основной символ
// CRGZApp:
// См. RGZ.cpp реализации этого класса
class CRGZApp : public CWinApp
{ public: CRGZApp();
// ClassWizard виртуальная функция переопределяет
// {{AFX_VIRTUAL(CRGZApp)
public:
virtual BOOL InitInstance();
// }}AFX_VIRTUAL
// Реализация
// ((AFX_MSG (CRGZApp)
// ПРИМЕЧАНИЕ – ClassWizard будет добавлять и удалять члены-функции здесь.
// Не изменяйте то, что вы видите в этих блоках генерируемого кода!
// )) AFX_MSG
DECLARE_MESSAGE_MAP ()
};
// (()) AFX_INSERT_LOCATION
// Microsoft Visual C + + будет вставлять дополнительные объявления непосредственно
// перед предыдущей строкой.
#ENDIF//!defined(AFX_RGZ_H__22E19C91_FA8D_4796_9813_762A1CFCADCE__INCLUDED_)
3) RGZDlg.h
#if
!defined(AFX_RGZDLG_H__1F1014A5_FE6B_4499_960B_43BCB795C72F__INCLUDED_)
#define AFX_RGZDLG_H__1F1014A5_FE6B_4499_960B_43BCB795C72F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// CRGZDlg dialog
class CRGZDlg : public CDialog
{public:
CRGZDlg(CWnd* pParent = NULL); // стандартный конструктор
// данные
// {{AFX_DATA(CRGZDlg)
enum { IDD = IDD_RGZ_DIALOG };
// Примечание: ClassWizard будет добавлять данные-члены здесь
// }}AFX_DATA
// ClassWizard виртуальная функция переопределяет
// {{AFX_VIRTUAL(CRGZDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV
// поддержка
// }}AFX_VIRTUAL
// Реализация
protected:
HICON m_hIcon;
// Функции сообщений
// {{AFX_MSG(CRGZDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
// }}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// {{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ будет добавлять новые объявления перед предыдущей строкой.
#endif
//!defined(AFX_RGZDLG_H__1F1014A5_FE6B_4499_960B_43BCB795C72F__INCLUDED_)
4) Stdafx.h:
// включаемый файл из стандартной системы включаемых файлов,
#if
!defined(AFX_STDAFX_H__F9A0117A_69C2_4EA2_9A7B_D6F83B4357D1__INCLUDED_)
#define AFX_STDAFX_H__F9A0117A_69C2_4EA2_9A7B_D6F83B4357D1__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif //_MSC_VER > 1000
#define VC_EXTRALEAN // исключает редко используемые вещи
// из заголовков Windows
#include <afxwin.h> // MFC ядро и стандартные компоненты
#include <afxext.h> // MFC расширения
#include <afxdisp.h> // MFC Automation классы
#include <afxdtctl.h> // MFC поддержка Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC поддержка Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
// {{AFX_INSERT_LOCATION}}
//Microsoft Visual C++ будет добавлять новые объявления перед предыдущей строкой.
#endif
//!defined(AFX_STDAFX_H__F9A0117A_69C2_4EA2_9A7B_D6F83B4357D1__INCLUDED_)
Исходные файлы Source files
1. RGZ.cpp
// определяет класс поведения для приложений.
#INCLUDE "stdafx.h"
#INCLUDE "RGZ.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// CRGZApp
BEGIN_MESSAGE_MAP (CRGZApp, CWinApp)
// ((AFX_MSG_MAP (CRGZApp)
// ПРИМЕЧАНИЕ – ClassWizard будет добавлять и удалять макросы здесь.
// Не изменяйте то, что вы видите в этих блоках генерируемого кода!
// )) AFX_MSG
ON_COMMAND (ID_HELP, CWinApp:: OnHelp)
END_MESSAGE_MAP ()
// CRGZApp конструктор
CRGZApp:: CRGZApp ()
{
//: добавить здесь код конструктора,
// Место проведения всех значимых инициализаций в InitInstance
}
// Единственный объект CRGZApp
CRGZApp thеАрр;
// Инициализация CRGZApp
BOOL CRGZApp:: InitInstance ()
{
AfxEnableControlContainer ();
// Стандартная инициализация
//В специальных программах инициализации вы не нуждаетесь.
#ifdef _AFXDLL
Enable3dControls (); //Вызов при использовании МFC в общей DLL
#else
Enable3dControlsStatic (); //Вызов, когда ссылка на статическом МFC
#endif
CRGZDlg DLG;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal ();
if(nResponse== IDOK)
{
// место обработки кода при диалоге выполняется при OK
}
else If(nResponse == IDCANCEL)
{
// место обработки кода при диалоге выполняется при Cancel
}
// Поскольку диалоговые окна были закрыты, return FALSE так что мы выходим
// из приложения
return FALSE;
}
2. RGZDlg.cpp
#include "stdafx.h"
#include "RGZ.h"
#include "RGZDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[ ] = __FILE__;
#endif
// CAboutDlg диалоговое приложение для App About
class CAboutDlg : public CDialog
{public:
CAboutDlg();
// Данные
// {{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
// }}AFX_DATA
// ClassWizard виртуальная функция переопределена
// {{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV поддержка
// }}AFX_VIRTUAL
// Реализация
protected:
// {{AFX_MSG(CAboutDlg)
// }}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{ // {{AFX_DATA_INIT(CAboutDlg)
// }}AFX_DATA_INIT}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
// Нет сообщений обработчика
END_MESSAGE_MAP()
// CRGZDlg dialog
CRGZDlg::CRGZDlg(CWnd* pParent /*=NULL*/): CDialog(CRGZDlg::IDD, pParent)
{ // Примечание: ClassWizard добавление и инициализация здесь
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CRGZDlg::DoDataExchange(CDataExchange* pDX)
{CDialog::DoDataExchange(pDX);
// Примечание: ClassWizard будет добавлять DDX и DDVзвонки здесь
}
BEGIN_MESSAGE_MAP(CRGZDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
// CRGZDlg обработчики сообщений
BOOL CRGZDlg::OnInitDialog()
{CDialog::OnInitDialog();
// Добавить пункт меню системы меню
// IDM_ABOUTBOX должна быть от командной системы.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if(pSysMenu != NULL)
{CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!strAboutMenu.IsEmpty())
{pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}
}
// Значок для диалогового приложения. Установлен автоматически, когда главное
// окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Установить большой значок
SetIcon(m_hIcon, FALSE); // Установить маленький значок
// Добавить дополнительную инициализацию здесь
return TRUE; / /возвращать TRUE, если установлено управление}
void CRGZDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if((nID & 0xFFF0) == IDM_ABOUTBOX)
{CAboutDlg dlgAbout;
dlgAbout.DoModal();}
else
{CDialog::OnSysCommand(nID, lParam);}}
// Если вы добавите кнопку, чтобы свести к минимуму ваше диалоговое приложение,
//вам потребуется следующий код: Нарисовать иконку (рис. 15.9).
//Для приложений MFC с использованием документа вид модели,
// Он будет автоматически установлен.
void CRGZDlg::OnPaint()
{if(IsIconic())
{CPaintDC dc(this); // контекст устройства для раскраски
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON); // Значок в центре
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() – cxIcon + 1) / 2;
int y = (rect.Height() – cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon); // Нарисовать значок
}
else
{CDialog::OnPaint();}}
HCURSOR CRGZDlg::OnQueryDragIcon() // свернуть окно.
{return (HCURSOR) m_hIcon;
Файлы ресурсов
Файлы ресурсов находятся в папке RGZ.rc (рис. 15.9).
Рис. 15.9. Информационное окно ResourceView