Структура mfc-проекта
Теперь мы можем рассмотреть, из каких основных блоков строится MFC-проект. Весь проект в целом можно условно подразделить на следующие составляющие:
-
используемые классы MFC и производные классы;
-
файлы программного кода, включая и заголовочные файлы;
-
файлы ресурсов (пиктограмм, диалоговых окон).
При начальном знакомстве с Visual C++ более целесообразно сначала создавать базовое приложение, используя средства AppWizard, а затем уже усовершенствовать его. Будем называть приложение, формируемое средствами AppWizard, приложением-шаблоном.
Следующий листинг содержит сокращенный текст файлов программного кода приложения-шаблона, предназначенного только для отображения диалогового окна.
// MyDIg.cpp : Определяет поведение класса приложения CMyDlgApp. // #include <afxwin.h> и др. BEGIN_MESSAGE_MAP(CMyDlgApp, CWinApp) // Таблица обрабатываемых ON WM PAINT() //сообщений END_MESSAGE_MAP() CMyDlgApp: :CMyDlgApp() // Конструктор класса приложения {} CMyDlgApp theApp; // Создание объекта приложения BOOL CMyDlgApp::InitInstance() // Обязательное переопределение метода .{ CMyDlgDIg dig; // Создание объекта диалогового окна m_pMainWnd = &dlg; m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } // MyDIgDIg.cpp : Файл реализации класса диалогового окна // #include <afxwin.h> и др. // Конструктор класса диалогового окна CMyDIgDlg::CMyDlgDlg(CWnd* pParent /*=NULL*/):CDialog(CMyDlgDlg::IDP, pParent) { m hlcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMyDlgDIg: :DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN MESSAGE MAP(CMyDlgDlg, CDialog) ON WM PAINT() ON WM QUERYDRAGICON() END MESSAGE MAP() /////////////////////////////////////////////////////////////////// // CMyDlgDIg message handlers (обработка сообщений) BOOL CMyDlgDlg::OnInitDialog() { CDialog::OnInitDialog(); // Вызов конструктора базового класса Setlcon(m hlcon, TRUE); // Определение ярлыка (большого) Setlcon(m_hlcon, FALSE); // Определение ярлыка (маленького) // TODO: Место для добавления кода инициализации return TRUE; // return TRUE unless you set the focus to a control } void CMyDlgDlg::OnPaint() { // Код обработки события } HCURSOR CMyDlgDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } // MyDlg.h : главный заголовочный файл для приложения MYDLG class CMyDlgApp : public CWinApp {public: CMyDlgApp(); // Overrides public: virtual BOOL Initlnstance(); // Implementation DECLARE MESSAGE_MAP() }; // MyDlgDlg.h : заголовочный файл // Объявление класса диалогового окна CMyDlgDIg class CMyDlgDIg : public CDialog { // Конструкторы public: CMyDlgDlg(CWnd* pParent = NULL); // Dialog Data enum { IDD = IDD_MYDLG_DIALOG };// Идентификатор объекта protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Функции обработки сообщений из таблицы сообщений virtual BOOL OnlnitDialog(); afx_msg void OnPaint(); afx msg HCURSOR OnQueryDragIcon(); DECLARE MESSAGE MAP() }; |