Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.DOC
Скачиваний:
7
Добавлен:
16.05.2015
Размер:
662.02 Кб
Скачать

4 Створення прикладних mfc-програм в середовищі Windows

Структура програм в середовищі Windows значно спрощується при використанні спеціальної бібліотекиMicrosoft Foundation Classes (MFC).Перехід до бібліотекиMFCозначає перехід до об’єктно-орієнтованого програмування мовою С++.

Бібліотека MFCпобудована за ієрархічним принципом. На вершині ієрархії знаходиться єдиний класCObject. Всі інші класи можна умовно розбити на дві категорії: похідні від класу CObject, і класи, що не залежать від CObject.Класи, які описують окремі компонентиWindows(вікна, діалоги, графіку тощо), як правило, створюють локальну ієрархію зі своїм базовим класом.

Кожен клас надає програмісту велику кількість різноманітних функцій. Оскільки в програмах можна використовувати як АРІ-функції, так і функції класів, тому, щоб їх розрізнити, останні будемо називатиMFC-функціями або методами.

4.1 Структура мінімальної прикладної mfc-програми

Перед тим як приступити до написання складних програм, розглянемо структуру найпростішої програми, завданням якої є лише виведення вікна програми на екран. В попередньому розділі ми реалізували цю задачу з допомогою API-функцій мовою С. Об’єм наступної програми буде в декілька раз менший.

Мінімальна MFC-програма містить два класи, які визначаються користувачем.

Перший клас СMyApp, є похідним від бібліотечного класуCWinAppі призначений для створення глобального об’єкта класу прикладних програм. Базовий класCWinAppмає всього два методи: конструктор і функцію ініціалізаціїInitInstance(). Перевизначаючи останнюMFC-функцію, програміст одержує можливість керувати ініціалізацією прикладної програми.

Починається перевизначувана MFC-функціяInitInstance() зі створення об’єкта фрейму вікна:

CMyFrameWnd *pMainWnd=new CMyFrameWnd;

потім із встановлення його як головного вікна прикладної програми

m_pMainWnd=pMainWnd; .

Далі вікно необхідно зробити видимим:

m_pMainWnd->ShowWindow(m_nCmdShow);

і поновити його вміст:

m_pMainWnd->UpdateWindow(); .

Дуже корисно зупинитися на особливостях позначень імен в бібліотеці MFC.

В якості префікса, який позначає ім’я класу, використовується заглавна буква Свід словаclass, за який йде власне ім’я класу. НаприкладCWnd, CWinApp, CDialogі інші. Такий же префікс рекомендується використовувати і для імен класу користувача.

Для членів класу прийнятий такий спосіб утворення імен: обов’язковий префікс m_ (від слівclass member), за яким йде префікс, який характеризує тип даних, а потім йде власне ім’я змінної, наприкладm_pMainWnd, дер– префікс покажчика. Для найменування змінних, які не є членами будь-якого класу, префіксm_ не використовується.

Кожна MFC-програма буде практично завжди містити хоча б один клас, похідний від бібліотечного віконного класу. В наступній мінімальнійMFC-програмі визначається власний класCMyFrameWnd, як похідний від класуCFrameWnd.

На клас CFrameWndпокладається багато задач, зокрема:

  • створення перекриваючих і висхідних вікон,

  • створення меню,

  • створення панелей інструментів і рядка стану,

  • створення акселераторів команд,

- підтримка операції ”перенести і відпустити” (drag-and-drop). Якщо більш коротко визначити призначення класуCFrameWndто необхідно сказати, що з його допомогою легко створювати фрейми вікон (Window frames). Фрейм представляє собою видиму рамку і стандартні елементи вікна (смуга заголовка, кнопки максимізації і мінімізації, меню, панель інструментів, рядок стану) (рис. 4.1).

В нашій мінімальній MFC-програмі конструктор класуCMyFrameWndвикликає методCreate(), призначений для встановлення початкових параметрів вікна.

Розглянуті вище функції і методи класів CMyAppіCMyFrameWndвідповідають за створення, відображення, і відновлення вікна, реєстрацію класу вікна, тобто виконує ті ж дії, що й функціяWinMain() в мінімальнійAPI-програмі дляWindowsна мовоюС. Залишилось тільки розглянути особливості виконанняMFC-програм.

Виконання цієї найважливішої задачі взяла на себе функція Run() класуCMyApp. Результатом виклику цієї функції і є запуск циклу обробки повідомлень і поява на екрані стандартного вікнаWindows, точно такого ж, як і при виконанні мінімальноїАРІ-програми. Саме томуMFC-програма і закінчується викликом стандартної функціїRun().

Нарешті, не забути на самому початку програми підключити бібліотеки MFCдо програми:

#include <afxwin.h> .

Через файл afxwin.hпідключаються всі інші заголовочні файли, включаючиwindows.h.

В результаті отримаємо варіант мінімальної MFC-програми.

Рисунок 4.1 – Вікно MFC-програми

#include <afxwin.h>

class CMyFrameWnd:public CFrameWnd

{

public:

CMyFrameWnd();

};

CMyFrameWnd::CMyFrameWnd()

{

Create(NULL,"My first program",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);

};

class CMyApp:public CWinApp

{

public:

virtual BOOL InitInstance();

};

BOOL CMyApp::InitInstance()

{

CMyFrameWnd *pMainWnd=new CMyFrameWnd;

m_pMainWnd=pMainWnd;

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return TRUE;

};

CMyApp app; .

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]