Статьи

C ++. Приклад створення діалогового додатки за шаблоном MFC

  1. виконання 1. Запустити MS Visual Studio .
  2. 3. Класи, які створюються в додатку

виконання

1. Запустити MS Visual Studio .
2. Створення проекту

Після завантаження MS Visual Studio треба викликати команду

File -> New -> Project

У вікні, яке відкриється (рис. 1), вибрати шаблон C ++ а в списку типів проектів вибрати MFC Application.

Ім'я папки, в якій зберігається проект, даємо, наприклад:

E: \ Programs \ CPP \ Train-03

Ім'я програми даємо MFCApplication1. Якщо встановлена ​​опція «Create directory for solution» (створити директорію для вирішення), то буде створена ще одна піддиректорія з ім'ям MFCApplication1.

Якщо встановлена ​​опція «Create directory for solution» (створити директорію для вирішення), то буде створена ще одна піддиректорія з ім'ям MFCApplication1

Мал. 1. Як вибрати програму типу «MFC Application«

В результаті, зголоситься майстер «MFC Application Wizard» (рис. 2). У вікні майстра видається інформація про поточні настройки проекту, які можна залишити без змін натисканням кнопки «Finish«.

Поточні параметри проекту наступні.

1. Підтримка проектом багатьох документів - MDI Application (MDI - Multiple Document Interface). Це означає, що додаток може одночасно тримати відкритими декілька документів, кожен з яких представлений окремим файлом.

2. Немає підтримки баз даних.

3. Немає підтримки складених (вбудованих) документів (контейнер, міні-сервер, повний сервер документів і т.п.).

4. Зовнішній вигляд програми - піддається налаштуванню (панелі інструментів, панелі стану програми і т.п.).

5. Зовнішній вигляд програми такий як в MS Visual Studio 2008.

6. Стиль типу проекту як Visual Studio (оформлення панелей, відкриття документів і т.п.).

)

Мал. 2. Опції за замовчуванням

У нашому випадку вибираємо інший варіант, робимо клік на кнопці «Next>«.

Зголоситься вікно «Application Type«, яка зображена на малюнку 3.

Зголоситься вікно «Application Type«, яка зображена на малюнку 3

Мал. 3. Вікно Application Type

Пояснимо деякі поля вікна.

Тип додатка (Application Type):

1. Single Document - підтримка SDI-додатків (Single Document Interface - інтерфейс з єдиним документом). Це є інтерфейс з єдиним документом, який дозволяє в кожний момент часу мати відкритим тільки один документ. Наприклад, редактор Notepad (Блокнот).

2. Multiple Documents - підтримка MDI-додаток (Multiple Document Interface - «багатодокументний інтерфейс»). В цьому випадку в додатку може одночасно створюватися (відкриватися) кілька документів, кожен з яких представляється окремим файлом. Наприклад, текстовий редактор Microsoft Word старих версій є додаток типу MDI.

3. Dialog Based - створення додатка як простого діалогового вікна, яке взагалі не відкриває документів. Наприклад, програма Калькулятор з пакету Windows.

4. Multiple top level documents - підтримка багатодокументного інтерфейсу така ж як в MDI-додаток. Тільки в цьому випадку документи групуються в різних вікнах в панелі завдань Windows, а не в межах програми. Наприклад, нові версії Windows підтримують цей режим.

У нашому випадку потрібно вибрати Dialog Based, як показаний на малюнку 3.

Поле «Use of MFC:» визначає, як потрібно формувати MFC бібліотеку. Є два варіанта. Перший варіант «Use MFC in a shared DLL» пропонує, щоб бібліотека MFC була розподіленою динамічно яку пов'язують бібліотекою (shared DLL). Використання DLL як динамічної бібліотеки скорочує обсяг додатки але ускладнює установку продукту.

Другий варіант «Use MFC in a static library» пропонує, щоб бібліотека MFC була статично прікомпонованной. При цьому варіанті виходить більший за розмірами «.exe» файл, але не буде труднощі при супроводі додатки. В цьому випадку модулі бібліотеки прікомпоновани статично, тому додаток легко переміщується з одного комп'ютера на інший.

Для нашого застосування поки що не має значення, який варіант формування MFC бібліотеки вибирати.

Після вибору «Next>» відкриється вікно «User Interface Features«. У цьому вікні пропонується вибрати оформлення фрейму (рамки) головного вікна програми. Фрейм включає в себе системне меню, рядок заголовка, кнопки мінімізації і максимізації, межі вікна і т.п ..

Мал. 4. Вибір оформлення фрейму (рамки) головного вікна програми

Властивості фрейму «Main frame styles» є такі:

1. Thick frame (потовщена рамка). В цьому випадку межі вікна є потовщені.

2. Minimize box - кнопка мінімізації вікна.

3. Maximize box - кнопка максимізації вікна.

4. System menu - системне меню, яке розміщується в лівому верхньому кутку вікна.

5. Minimized - режим, при якому під час запуску вікно програми згортається в піктограму.

6. Maximized - режим, при якому під час запуску вікно програми розгортається на весь екран.

Вибір опцій можна встановити на власний розсуд.

В поле Dialog Title встановлюється назва програми.

Після встановлення опцій фрейма робимо клік на «Next>«. В результаті відкриється вікно як показано на малюнку 5.

Мал. 5. Вікно настройки додаткових властивостей

У вікні на малюнку 5 доступні опції настройки додаткових властивостей програми. Пояснимо деякі з них.

1. Context Sensitive Help (HTML) - контекстна довідка. Буде створено меню Help додатки, яке буде мати опції Index і Using Help.

2. Active X controls - дозволяє включати Active X елементи управління в додатку.

3. Automation - дозволяє додатку виставляти об'єкти для скриптів і інших додатків.

4. Windows sockets - дозволяє додатку мати безпосередній доступ до Internet через протоколи FTP, HTTP.

Робимо клік на «Next>«. В останньому вікні (рис. 6) потрібно підтвердити імена класів і імена файлів, які створює MFC Application Wizard.

Мал. 6. Запит до підтвердження імен створюваних класів

Ми залишаємо все як є і робимо клік на «Finish«. Сформується програмний код класів. Форма додатка буде мати вигляд як показано на рис. 7.

7

Мал. 7. Форма додатка після виконання майстра App Wizard

Тепер можна запустити додаток на виконання і проаналізувати його роботу.

3. Класи, які створюються в додатку

В результаті виконаних дій, буде створено два класи з іменами CMFCApplication1App і CMFCApplication1Dlg.

Клас CMFCApplication1App успадкований від CWinApp. Цей клас є класом додатки в цілому.

Клас CMFCApplication1Dlg є класом діалогу для додатка в цілому.

Після створення програми в Solution Explorer створюються файли класів (рис. 8).

Класу CMFCApplication1App відповідають файли «MFCApplication1.h» і «MFCApplication1.cpp«.

Класу CMFCApplication1Dlg відповідають файли «MFCApplication1Dlg.h» і «MFCApplication1Dlg.cp p».

cp p»

Мал. 8. Файли додатки в Solution Explorer

Лістинг файлу заголовка «MFCApplication1.h» для програми наступний:

// MFCApplication1.h: main header file for the PROJECT_NAME application // #pragma once #ifndef __AFXWIN_H__ #error "include 'stdafx.h' before including this file for PCH" #endif #include "resource.h" // main symbols // CMFCApplication1App: // See MFCApplication1.cpp for the implementation of this class // class CMFCApplication1App: public CWinApp {public: CMFCApplication1App (); // Overrides public: virtual BOOL InitInstance (); // Implementation DECLARE_MESSAGE_MAP ()}; extern CMFCApplication1App theApp;

У наведеному вище лістингу між директивою

#ifndef ... #endif

реалізовано запобігання повторного використання однакових імен файлів заголовків, які навіть можуть бути розміщені в різних папках.

Далі оголошується клас CMFCApplicationApp який успадкований від класу CWinApp. Клас CWinApp включає в себе більшість функціональних можливостей, необхідних додатку. Майстер AppWizard згенерував кілька функцій для класу-спадкоємця, які «перевантажують» власні функції базового класу. У класі перевантажується віртуальна функція InitInstance ().

рядок

DECLARE_MESSAGE_MAP ()

означає, що можна користуватися карткою повідомлень.

Реалізація класу CMFCApplication1App приведена в файлі «CMFCApplication1App.cpp«.

Лістинг файлу «CMFCApplication1App.cpp» наступний.

#include "stdafx.h" #include "MFCApplication1.h" #include "MFCApplication1Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFCApplication1App BEGIN_MESSAGE_MAP (CMFCApplication1App, CWinApp) ON_COMMAND (ID_HELP, & CWinApp :: OnHelp) END_MESSAGE_MAP ( ) // CMFCApplication1App construction CMFCApplication1App :: CMFCApplication1App () {// support Restart Manager m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: add construction code here, // Place all significant initialization in InitInstance} // The one and only CMFCApplication1App object CMFCApplication1App theApp; // CMFCApplication1App initialization BOOL CMFCApplication1App :: InitInstance () {// InitCommonControlsEx () is required on Windows XP if an application // manifest specifies use of ComCtl32.dll version 6 or later to enable // visual styles. Otherwise, any window creation will fail. INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof (InitCtrls); // Set this to include all the common control classes you want to use // in your application. InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx (& InitCtrls); CWinApp :: InitInstance (); AfxEnableControlContainer (); // Create the shell manager, in case the dialog contains // any shell tree view or shell list view controls. CShellManager * pShellManager = new CShellManager; // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need // Change the registry key under which our settings are stored // TODO: You should modify this string to be something appropriate // such as the name of your company or organization SetRegistryKey (_T ( "Local AppWizard-Generated Applications")); CMFCApplication1Dlg dlg; m_pMainWnd = & dlg; INT_PTR nResponse = dlg.DoModal (); if (nResponse == IDOK) {// TODO: Place code here to handle when the dialog is // dismissed with OK} else if (nResponse == IDCANCEL) {// TODO: Place code here to handle when the dialog is / / dismissed with Cancel} // Delete the shell manager created above. if (pShellManager! = NULL) {delete pShellManager; } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; }

У наведеному вище лістингу найбільший інтерес представляє функція InitInstance ().

У функції InitInstance () створюється вікно програми.

Описується змінна dlg типу вікно програми.

рядок

m_pMainWnd = & dlg;

означає, що дане вікно додатка є головним вікном серед всіх вікон, які можуть бути ще створені в додатку.

Наступною викликається функція DoModal (), яка відкриває вікно програми. Після виклику відбувається перевірка на значення, яке було повернуто після натискання на кнопках «OK» або «Cancel«.

Схожі теми:

Новости