Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Створення каркасу mfc-програми






ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ

БД база даних
ЕОМ Електронно-обчислювальна машина
ЕК елемент керування
ЕС експертна система
ПЗ програмне забезпечення
ПІ панель інструментів
ШІ штучний інтелект
СК система координат
СКБД система керування базами даних
API Application programming interface (набір cистемних функцій програмування інтерфейсу Windows)
COM Component Object Model (модель компонентних об’єктів)
DDB Device Dependent Bitmap (бітове зображення, залежне від пристрою виведення)
DIB Device Independent Bitmap (бітове зображення, незалежне від пристрою виведення)
MFC Microsoft Foundation Classes (базові класи Microsoft)
MSDN Microsoft Developer Network (система документації Microsoft Visual Studio)
OpenGL Open Graphic Library (відкрита графічна бібліотека)

 

 


ВСТУП

 

Комп’ютерні технології – галузь, що набула нечуваного зростання за останні 20 років з моменту появи персональних комп’ютерів. Комп’ютер увійшов у шкільний клас, діловий офіс, осучаснив виробничі системи. Із великим масштабним застосуванням комп’ютерів пов’язано і значне зростання потреби у програмному забезпеченні. Розробка програмного забезпечення становить одну з найважливіших гілок системи комп’ютерних технологій і забезпечує програмну підтримку стрімкого зростання апаратного забезпечення.

Мови програмування є інструментами вирішення практичних завдань у галузі комп’ютерних технологій. Мови програмування породжувалися, коли виникала необхідність вирішення завдань розробки програмного забезпечення і зникали, коли з’являлися нові, більш ефективні засоби розробки або зникала потреба у вирішенні самих завдань. Наприклад, мова Pascal розроблялася здебільшого для навчання студентів алгоритмічним мовам програмування. Мова Сі, та похідна від неї C++, з’явилися як системні мови програмування операційної системи Unix. Мова програмування Prolog – як засіб програмування, що реалізує логічний підхід вирішення завдань, в основному систем штучного інтелекту. Така досить нова мова програмування, як Jawa, з самого початку орі-єнтувалася на розробки програмних додатків для Internet.

Розмірковуючи про мови програмування, неможливо не звернути увагу на середовища розробки програмного забезпечення, у яких ці мови реалізовані. Буває навіть, що середовища розробки ототожнюють з мовами програмування і тоді чуєш: „Моя програма написана на Delphi”, хоча, насправді вона написана мовою Pascal у середовищі програмування Delphi. Щоправда, ця критика не є бездоганною. Розробка програми для окремої операційної системи, наприклад Microsoft Windows, вимагатиме застосування багатьох бібліотек, що на практиці реалізовані кожним середовищем програмування у різний спосіб.

Ще один фактор, на який слід звернути увагу – це спосіб розробки програм. Останнім часом розробники середовищ програмування надають можливість засобів швидкої розробки програмного забезпечення. Завдяки цьому набули широкої популярності такі середовища програмування як Delphi та C++ Builder. При такому способі розробки програмного забезпечення каркас програми створюється автоматично, а програмісту необхідно правильно розташувати деталі інтерфейсу програми та визначити послідовність їх функціонування. Такий підхід значно прискорює швидкість розробки програм, але програміст має знати, який саме каркас створено засобами швидкої розробки, наскільки ефективним він є і чи можна оптимізувати його використання. Тому, на мій погляд, не слід забувати про базові основи побудови програми, взаємодію програмних об’єктів різного призначення. Саме цей підхід реалізовано у навчальному посібнику.

Серед програмістів та користувачів програмного забезпечення не згасають гарячі суперечки про ефективність та надійність операційних систем. Об’єктом критики найчастіше є Microsoft Windows. Насправді, ефективність операційної системи залежить від цілого ряду факторів, серед яких рівень апаратної сумісності компонентів ЕОМ, коректність драйверів кожного з компо-нентів ЕОМ, нарешті, вміння користувача операційної системи правильно налаштовувати та керувати усіма компонентами ЕОМ. Компанія Microsoft включила підтримку своєю операційною системою багатьох системних служб і не завжди ці системні сервіси, функціонуючи одночасно, додають швидкості у виконанні програм. Однак, незважаючи ні на що, операційна система Microsoft Windows залишається лідером операційних систем, встановлюваних на робочих станціях. Тому слід знати, яким чином, власне, розробляти програмне забезпечення для кінцевого користувача і орієнтуватися на зручність роботи саме його – кінцевого користувача програмного забезпечення.

При розробці програм важливим питанням є – у якому середовищі програмування вести розробку. Знову-таки є прибічники одних середовищ розробки і противники інших систем. У навчальному посібнику ми виходитиме з того, що якщо базовою операційною системою є Microsoft Windows, то й середовище розробки має бути від цього ж виробника, тобто Microsoft Visual Studio. Що ж до мови програмування, то такою обрана С++, а саме її реалізація у Microsoft Visual Studio – Microsoft Visual C++ 6.0. Викладання Microsoft Visual C++ 6.0 у посібнику ведеться від самих основ побудови Windows програм – до викладення певних технологій програмування, реалізованих на Visual C++. При цьому передбачається знання мови програмування C++.

Читач має право задати запитання: „Ще одна книжка про Visual C++? Ми вже стільки їх бачили! Серед них багато таких, що мають 800-1000 сторінок! ”. Пам’ятаєте повість Артура Конан-Дойла „Собака Баскервілів”, а саме початок викладу сімейної легенди Баскервілів: „Багато є свідоцтв про собаку Баскерві­лів...”. Те ж саме ми можемо сказати про мови та про системи програмування: багато про них написано книжок, зокрема про Visual C++. З іншого боку можна сказати, що жодна з книжок не охоплює усі аспекти розробки програмного за­безпечення на Visual C++. Одного часу достатньо характерним, на жаль, був під­хід, коли у книжках описувався інтерфейс середовища програмування, стисло описувалася концепція „Документ-Вигляд”, а потім наводився досить вибірко­вий переклад документації з Visual C++. Нагадаю, що бібліотека розробника Microsoft Visual Studio – MSDN сягає 4 компакт–дисків і жодна книжка увесь цей об’єм не охоплює. Тому, мета навчального посібника – вказати стежку, якою, на мій погляд, можна рухатися, вивчаючи технології програмування на Visual C++. Автор буде радий конструктивним зауваженням на адресу навчаль­ного посібника.

В основу навчального посібника покладено лекції з дисципліни „Техно­логії програмування гнучких комп’ютеризованих систем”, прочитані автором для студентів спеціальності „Гнучкі комп’ютеризовані системи та робототех­ніка” у Харківському національному університеті радіоелектроніки та лекції з дисципліни „System software” (системне програмне забезпечення), про­читані у тому ж університеті для іноземних студентів спеціальності „Комп’ютерні системи та мережі” у 1999-2005 рр [3].


1 ОСОБЛИВОСТІ ІНТЕРФЕЙСУ КОРИСТУВАЧА visual c++ 6.0

1.1 Створення програмних проектів у Visual C++ 6.0

 

Microsoft Visual C++ 6.0 є інтегрованим середовищем розробника програмного забезпечення, що є складовою частиною пакета Microsoft Visual Studio версії 6.0.

Visual C++ 6.0 забезпечує створення декількох типів проектів. Для створення проекту лише завантажте Visual C++, зайдіть до головного меню (пункт File) і оберіть New. В результаті з’явиться діалогове вікно, зображене на рисунку 1.1

 

Рисунок 1.1 – Діалогове вікно створення проектів

 

Можна побачити, що діалогове вікно складається з декількох сторінок: Files, Projects, Workspaces, Other Documents.

Сторінка Files забезпечує створення окремих файлів, зокрема заголовкових файлів (розширення *.h), файлів програмного коду С++ (розширення *.cpp), файлів опису ресурсів (розширення *.rc), файлів бітових зображень тощо. Потреба у цій сторінці виникає, коли необхідний файл попередньо створюється поза структурою проекту.

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

Сторінка Other Documents дозволяє створювати та редагувати інші документи, наприклад документи Microsoft Word, Microsoft Excel, Microsoft PowerPoint та включати їх до складу проекту.

Найбільш цікава для нас сторінка – Projects. Вона дозволяє створення програмних проектів різного типу. Кількість та склад проектів можуть змінюватися у залежності від комплектації Visual C++. Зокрема відзначимо такі з них:

- ATL COM Wizard: створення проектів для використання розширеної бібліотеки шаблонів (ATL – advanced template library) на основі технології COM;

- Custom AppWizard: створення настроюваного майстра програмних прикладок Application Wizard;

- Database Project: створення проектів із використанням інтерфейсу ODBC (Open Database Connectivity);

- MFC AppWizard (dll): створення проекту із використанням Application Wizard, результатом якого буде динамічно-зв’язана бібліотека (dll);

- MFC AppWizard (exe): створення проекту із використанням Application Wizard, результатом якого буде виконуваний файл (exe);

- Win32 Application: створення Win32-проекту із використанням функцій Windows API або функцій та класів бібліотеки MFC без використання Application Wizard;

- Win32 Console Application: створення Win32-консольного проекту, що відповідає звичайним проектам у операційній системі DOS;

- Win32 dynamic-linked library: створення проекту без використання Application Wizard, результатом якого буде динамічно-зв’язана бібліотека (dll);

- Win32 static library: створення статичної бібліотеки.

Нас найбільше цікавитумуть проекти типу Win32 Application.

Таким чином, визначившись з типом проекту (Win32 Application) Win32 Application, задаємо його ім’я. Далі з’являється вікно, показане на рисунку 1.2.

 

Рисунок 1.2 – Вибір характеристик проекту типу Win32 Application

В цьому вікні характеристики проекту означають: „An Empty project” – пустий проект; „A simple Win32 application” – проект, який міститиме одну функцію WinMain; „A typical “Hello World! ” application” – проект на основі WinAPI-функцій, який виводитиме привітання у вікно.

 

1.2 Визначення класів, функцій та змінних класу

 

Для наших проектів ми обиратимемо першу опцію, тобто пустий проект. В такому разі автоматично створюється лише декілька файлів проекту. Решту нам доведеться додати самостійно. Як можна побачити на рисунку 1.3, для пустого проекту Project1 середовище розробника створює сторінку із описом наявних у проекті класів. Якщо навести курсор миші на напис “Project classes” та натиснути праву клавішу миші, з’являється спливаюче меню, яке дозволяє додати класи у пустий проект.

 

Рисунок 1.3 – Додавання класів у пустий проект

 

Якщо обрати пункт “New Class…” з’явиться ще одне діалогове вікно, яке забезпечує визначення нового класу та додавання його у проект (рис. 1.4).

Можна побачити, що у вікні визначення класу необхідно вказати: ім’я класу, що визначається (поле Name); ім’я класу, властивості якого ваш клас успадковує (поле Base class) – звичайно, якщо такий існує; ім’я файла, у якому знаходитиметься опис реалізацій функцій класу. Зазвичай, ім’я файла практично збігається з іменем класу (вилучається префікс “С”). Для зміни імен файлів, що містять визначення класу (заголовковий файл із розширенням *.h) та визначення функцій класу (заголовковий файл із розширенням *.exe) натискають клавішу “Change”. У простішому випадку, коли проект нескладний, можна розмістити усі визначення класів у одному заголовковому файлі, а усі функції класів – у одному *.cpp-файлі. Для цього для другого та інших класів проекту вкажемо розташування першого класу та його функцій.

 

Рисунок 1.4 – Визначення нового класу

 

Коли клас створено, можна переходити до визначення його функцій (методів). Слід зазначити, що Visual C++ під час визначення класу автоматично створює пусті тіла двох функцій: конструктора і деструктора (нагадаємо, що ім’я конструктора збігається з іменем класу, а у ім’я деструктора додається префікс ~). Для додавання функцій у клас необхідно обрати ім’я класу та натиснути праву клавішу миші. При цьому з’являється спливаюче меню, у якому обирають “Add Member Function…” (зображено на рис. 1.5а).

а) б)

Рисунок 1.5 – Послідовність додавання функції

а) додавання функції у клас; б) визначення параметрів функції

 

Одразу після цього з’являється діалогове віконце, зображене на рис. 1.5б, у якому задають: тип значення, який повертається функцією (поле “Function Type”), назву та список параметрів. Якщо параметрів нема – їх не вказують, якщо є – параметри вказують у дужках після назви функції, наприклад:

 

OnLeftButtonDown(UINT Flags, CPoint Loc);

Аналогічним чином у опис класу додаються змінні-члени (якщо у спливаючому меню обрати “Add Member Variable…”). У цьому випадку доречним стає вибір типу доступу до змінної: public, private або protected (поле “Access”).

Одразу після визначення функції, рядок, що свідчить про включення функції у клас, з’являється у лівій частині робочого поля проекту, а пусте тіло функції – у лівій частині робочого поля. При цьому легко в ручному режимі безпосередньо додати текст функції, що й зображено на рис. 1.6.

 

 

Рисунок 1.6 – Визначення функції та вигляд проекту

 

Глобальні функції та змінні, звичайно, не входять до складу класів. Їх визначають безпосередньо у файлі програмного коду (із розширенням *.cpp). У структурі проекту вони зазначаються під позначкою “Globals”.

Додавання у проект ресурсів буде розглянуто пізніше.

 

1.3 Компіляція проекту та пошук помилок

 

Коли введення програмного коду класів та функцій проекту завершено, програму можна скомпілювати, натиснувши клавішу F7. Якщо помилок нема – проект можна запустити на виконання, натиснувши Ctrl+F5. А, якщо ж компілятор знаходить помилки, інформація про них виводиться у нижній частині робочої площини проекту. Обравши опис помилки і двічі натиснувши ліву клавішу миші можна перейти до ймовірного місця розташування помилки. Ви легко можете потрапити до опису першої помилки проекту, натиснувши клавішу F4, та переміщатися між помилками.

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


СТВОРЕННЯ КАРКАСУ mfc-ПРОГРАМИ

 

2.1 Загальна інформація про MFC

Створення програм для операційної системи Microsoft Windows у „кла-сичному” випадку має містити виклик функції WinMain() та інших функцій прикладного інтерфейсу Windows – WinAPI. Такий спосіб надає можливість повністю контролювати створення та виконання програми на „низькому” рівні функцій прикладного інтерфейсу, але навіть проста програма, створена таким шляхом, займатиме декілька сторінок коду.

Тому, різні виробники засобів розробки програмного забезпечення запропонували спростити шлях розробки Windows-програм за допомогою використання спеціальних бібліотек. Так фірма Borland запропонувала бібліотеку OWL (Object Window Library), Microsoft – бібліотеку MFC (Microsoft Foundation Classes). Ці бібліотеки використовують концепцію об’єктно-орієнтованого програмування, на відміну від підходу WinAPI, який орієнтовано на класичну мову Сі. Якщо порівнювати ці бібліотеки, можна знайти багато спільного, це не дивно, бо обидві бібліотеки у дещо різний спосіб спрямовуються до однієї мети – створення Windows-програм. Слід зазначити, що згодом фірма Borland розробила і більш досконалий засіб – Visual Components Library (VCL), який реалізує й іншу, швидку концепцію розробки програм – Rapid Application Design (RAD).

То ж перейдемо до MFC.

Абревіатуру MFC (Microsoft Foundation Classes) можна перекласти як Базові класи Microsoft. MFC – є набором класів C++, створених для реалізації функціональних можливостей програмних додатків, написаних Microsoft для операційних систем Windows.

Бібліотека MFC містить більше 200 класів. MFC призначена для спрощення процесу програмування. Це спрощення, головним чином, полягає у багаторазовому використанні одного й того ж самого коду, реалізації компонентів графічного інтерфейсу Windows (вікна, елементи керування, графічні пристрої та ін.), як об’єктів мови програмування С++, у реалізації функцій компонентів Windows.

Відомо, що для спрощення сприйняття програмного коду використовують узгодження імен змінних. Це передбачає, що зазвичай змінна певного типу має стандартний префікс. Символи префіксів наведені у таблиці 2.1.

 

Таблиця 2.1 – Символи префіксів типів змінних MFC

 

Префікс Тип даних
   
B булевий (один байт)
C символ (один байт)
C клас
Dw довге беззнакове
F 16-розрядне бітове поле (прапорець – flag)
Fn функція
Продовження табл. 2.1.
   
H дескриптор (засіб опису)
L довге ціле
Lp довгий покажчик
N коротке ціле
P покажчик
Pt довге ціле, що зберігає екранні координати
W коротке безнакове ціле
Sz покажчик на рядок, що завершується символом ‘\0’
lpsz довгий покажчик на рядок, що завершується символом ‘\0’
rgb довге ціле, що зберігає значення кольору у форматі RGB

 

У своїй роботі MFC використовує звичайні стандартні типи С++, окрім того застосовує декілька власних. Стислий їх перелік наведено у таблиці 2.2.

 

Таблиця 2.2 – Деякі типи бібліотеки MFC

Позначення типу Опис
HANDLE дескриптор об'єкта
HWND дескриптор вікна
BYTE байт (8 бітів)
WORD слово без знака (16 бітів)
DWORD подвійне слово (32 біти)
UINT беззнакове ціле число
BOOL булева змінна (має бути TRUE або FALSE)
LONG 32-розрядне значення із знаком
LPSTR покажчик на рядок символу Windows із нульовим символом у кінці
LPCSTR показник на константний рядок символу Windows із нульовим символом у кінці

 

Можна побачити, що деякі з типів, наприклад BOOL, за записом і змістом майже збігається зі стандартним bool, але, насправді, це різні типи. Тип BOOL відображає специфіку MFC, саме його значення повертається функціями MFC, про що нагадає компілятор у випадку застосування типу bool.

MFC містить багато класів, які можна використовувати для створення програмних додатків. Так, зокрема, MFC забезпечує такі основні категорії класів: класи прикладки, класи вікон, меню, класи діалогових вікон, класи доку-ментів та вигляду, класи елементів керування, графіки, архівування та доступу до файлів, класи баз даних, різні класи підтримки.

Якщо досліджувати ієрархію MFC класів, можна побачити, що майже кожен клас у бібліотеці походить з класу CObject. Складається враження, що CObject, який знаходиться у вершині MFС – за структурою величезний і складний. Однак, як це не дивно, CObject – один з найменших класів у MFC. Будь-який клас користувача, який призначається для збереження або завантаження даних (так званий процес серіалізації), має виводитися безпосередньо або побічно, від CObject.

CObject забезпечує: підтримку серіалізації, ведення інформації про виконання класу, вивід діагностичної інформації, сумісність з іншими класами.

CObject не підтримує множинну спадкоємність. Класи користувача можуть мати тільки один базовий клас CObject.

Властивості СObject успадковані декількома класами. Стисла їх схема наведена на рисунку 2.1.

 

Рисунок 2.1 – Ієрархія зв’язків декількох основних класів MFC

 

Серед класів-спадкоємців СObject – CCmdTarget, CException, CFile, CMenu, CDC, CGdiObject.

CCmdTarget є базовим класом, який забезпечує механізм обробки пові-домлень. Ця обробка ведеться за допомогою спеціальної карти повідомлень, яка направляє команди на виконання спеціально призначеній функції – обробнику повідомлення.

CException забезпечує обробку усіх виключних ситуацій MFC.

CFile – базовий клас для обробки файлів, який безпосередньо забезпечує функції введення-виведення. CFile разом з класом CArchive класом забезпечують процес серіалізації об’єктів MFC.

Клас CMenu реалізує меню Windows і за своїми властивостями походить зі структури HMENU. Він забезпечений функціями-членами для створення, відображення, модифікації та вилучення меню.

Клас CDC визначає так звані об'єкти контексту пристрою. Об'єкти класу CDC забезпечують функції роботи з контекстом пристрою. Контекстом пристрою можуть бути дисплей або принтер, тому у CDC забезпечуються функції роботи з контекстом дисплея, пов'язаним з клієнтською областю вікна програми.

Клас CGdiObject є базовим у взаємодії із інтерфейсом GDI системи Windows (інтерфейс графічних пристроїв) і забезпечує обробку бітових зображень, пір’я, пензлів, палітр, шрифтів. Об’єкти CGdiObject ніколи не створюються безпосередньо, використовуються лише об’єкти похідних класів. Скоріше за все, ви створюватимете об'єкти похідних від CGdiObject класів, наприклад, типу CPen або CBrush (відповідно перо та пензель).

Від класу CCmdTarget породжується дуже важливий MFC клас – CWnd. CWnd забезпечує основні функціональні можливості всіх класів вікна у бібліотеці MFC.

Об'єкт CWnd внутрішньо відрізняється від вікна Windows, але обидва є тісно пов’язаними. Об'єкт класу CWnd створюється та вилучається конструктором та деструктором цього ж класу. Вікно Windows, з іншого боку, є внутріш-ньою структурою Windows, яка створюється функцією Create() (член класу CWnd), та вилучається віртуальним деструктором класу CWnd. Функція DestroyWindow() видаляє вікно Windows, не видаляючи власне об'єкт.

У свою чергу, CFrameWnd клас забезпечує функціональні можливості так званого однодокументного інтерфейсу Windows SDI (Single Document Interface), і забезпечує відповідні функції вінка, багато з яких виведені з батьківського для CFrameWnd – класу CWnd.

Об'єкт класу CWinThread представляє потік виконання програмного додатка. Основний потік виконання забезпечується об'єктом, виведеним з класу CWinApp, який сам виводиться з CWinThread. Додаткові об'єкти CWinThread дозволяють отримати багатопотоковий режим виконання програмного додатка.

Таким чином, CWinApp є базовим класом, з якого унаслідується об'єкт прикладки Windows. Об'єкт прикладки забезпечує ініціалізацію програмного додатка та його запуск.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.