Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції_ІЗВП_укр.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
6.39 Mб
Скачать

Контрольні запитання

1. Що являє собою середовище розробки Visual C + +?

2. Що являє собою бібліотека MFC?

3. Назвіть основні компоненти Visual C++?

4. Поняття та призначення відладчика програми?

5. Що являють собою бібліотеки?

6. Які програми називаються керованими і некерованими?

Лекція 3

Тема: Використання майстра створення додатків Visual C + +

ПЛАН:

1 Консольний додаток

2. Діалоговий додаток

3 Багатовіконний додаток Windows

4 Одновіконний додаток

Середовище програмування Visual С + + використовується не тільки для редагування, компіляції та відлагодження програм, але і для генерації заготовок програм. Ці заготовки являють собою працездатні програми, що реалізують основні елементи інтерфейсу Windows, необхідні в будь-якій користувальницькій програмі, і, не виконують ніякої обробки. Майстер додатків дозволяє створити таку заготовку за кілька хвилин, однак, щоб отримати на її основі повноцінний комерційний додаток, у вас підуть тижні і місяці роботи. Програмісту, починаючому своє ознайомлення з Visual С + +, необхідно, перш за все, ознайомитися з найпростішими типами додатків, що генеруються майстрами. До них слід віднести консольні додатки й додатки, що згенерували майстром MFC AppWizard (exe) (майстер AppWizard, що генерує виконуючи програми з використанням бібліотеки MFC). Назва останнього типу додатків слід визнати вкрай невдалим, оскільки бібліотеку MFC використовують практично всі типи додатків, компільованих Visual С ++ (навіть деякі консольні додатки). Крім того, використання імені майстра AppWizard тільки в трьох майстрів, генеруючих програмні коди для виконавчих файлів, динамічних бібліотек та керуючих елементів ActiveX, вносить непотрібну неоднозначність в термінологію. Тому доцільніше було б використовувати це ім'я для всіх майстрів додатків. Для визначеності будемо називати додатки, згенеровані майстром MFC AppWizard (exe), додатком Windows. Особливим класом додатків Windows є діалоговий додаток.

1 Консольний додаток

З точки зору програміста, консольний додаток є звичайною програмою DOS, що використовує всі стандартні оператори, але дозволяє використовувати всю доступну оперативну пам'ять (за умови, що кожен елемент даних програми не буде превищувати за розміром 1 Мб). Цей тип додатка запускається в особливому типі вікна, званому "Вікно MS-DOS".

Перетворюючи програми, написані під DOS, в консольний додаток необхідно пам'ятати, що MS-DOS є 16-розрядної операційною системою, a Windows 95, Windows 98 і Windows NT є 32-розрядними операційними системами. З точки зору програми це означає, що в MS-DOS і Windows 3.x використовуються 16-розрядні покажчики, а в Win32 - 32-розрядні покажчики. Для спрощення переносу програм, написаних для 16-розрядних ОС, в 32-розрядні ОС розмір змінної типу int встановлюється рівним розміру покажчика. Тому в консольному додатку змінна типу int займає 4 байти, а не два, як це має місце в програмах, написаних під DOS.

Консольним додаткам розробники Visual С + + приділяють постійну увагу, і саме на прикладі консольних додатків і можливостей майстра, що створює для них заготовки, найбільш яскраво простежуються етапи розвитку Visual С + + при переході від однієї його версії до іншої.

Створення консольного додатка

Щоб створити заготівлю консольного додатка з використанням майстра:

1. Закрийте всі відкриті проекти та файли і виберіть команду File, New (Файл, Створити). З'явиться діалогове вікно New (Створити), розкрите на вкладці Projects (Проекти).

2. Виділіть пункт Win32 Console Application (консольний додаток для 32-розрядного Windows) і введіть в текстове вікно Project name (Ім'я проекту) ім'я проекту Console. В результаті цих дій діалогове вікно New прийме вигляд, зображений на рис. 1.1.

Рис.1.1 – Окно New

3. Натисніть кнопку ОК. З'явиться діалогове вікно Win32 Console Application - Step 1 of 1 (Консольний додаток для 32-розрядного Windows. - Крок 1 з 1), зображений на рис. 1.2.

Група перемикачів What kind of Console Application do you want to create? (Яке консольний додаток слід створити?) Містить наступні позиції:

• An empty project (Порожній проект) - майстер створює додаток, в якому відсутні файл реалізації, файл заголовка і файл ресурсів. Можливість створення всіх цих файлів повністю надається вам

• A simple application (Простий додаток) - майстер створює додаток, що складається з файлу реалізації та файлу заголовка. У файлі реалізації відсутні виконавчі оператори

• А "Hello World!" application (Додаток "Hello World!") - майстер створює додаток, аналогічне попередньому, але в ньому файл реалізації містить оператор виводу на екран рядка "Hello World!"

• An application that supports MFC (Додаток, що використовує функції з бібліотеки MFC) - майстер створює додаток, що виводить на екран рядок, оформлений, як строковий ресурс.

Рис 1.2 - Діалогове вікно Win32 Console Application - Step 1 of 1

4. Після установки перемикача у відповідне положення натисніть кнопку Finish (Завершення роботи). З'явиться діалогове вікно New Project Information (Інформація про створюваний проекті), зображене на рис. 1.3.

Рис. 1.3 - Діалогове вікно New Project Information

5. Натисніть кнопку ОК. Майстер створить новий додаток.

Якщо ви встановите перемикач вибору генерується додатки в положення An empty project, то вам доведеться писати всі файли програм проекту вручну, що не можна назвати вдалим вибором при генерації заготовки програми.

При установці перемикача вибору генерується додатки в положе ¬ ня A simple application в результаті роботи майстра буде створена найпростіша заготівля файлу реалізації і файл заголовка StdAfx.h, що відноситься до генеруємому майстром файлу StdAfx.cpp, відповідальному за створення перекомпілювати заголовків. Текст заготовки файлу реалізації, одержуваний при даних установках елементів управління, приведений в лістингу 1.1.

Лістінг1.1 Заготівля файлу реалізації консольного застосування// Console.cpp : Defines the entry point for the console application.

#include "stdafx.h"

int main(int arge, char* argv[])

{

return 0;

}

Оскільки в даному проекті в функції main відсутнє виконання оператора, то результатом запуску даного проекту на виконання з'явиться поява порожнього вікна MS-DOS, яке необхідно тут же закрити. Як випливає з тексту даного лістингу, ця установка є оптимальною для користувача, не має намір користуватися класами з бібліотеки MFC.

Положення перемикача вибору генерованого додатку "Hello World!" application і An application that supports MFC є чисто демонстраційними і різними способами реалізують одну і ту ж дію - виведення на екран рядків символів.

Як випливає з лістингу 1.2, перше демонстраційне прикладення здійснює висновок стандартним способом з використанням функції printf.

Лістинг 1.2. Консольний додаток "Hello World!"

// Console.cpp : Defines the entry point for the console application.

#include "stdafx.h"

int main(int arge, char* argv[])

{

printf("Hello World!\n");

return 0;

}

Щоб запустити даний проект на виконання:

1. Виберіть команду меню Build, Execute Console.exe (Компіляція, Запустити файл Console.exe на виконання) або натисніть кнопку Execute Program (Запустити програму на виконання) в панелі інструментів Build (Компіляція) або в панелі інструментів Build MоnоBar (Зменшена панель інструментів компіляція). З'явиться вікно повідомлення Microsoft Visual С + +, в якому повідомляється, що виконуваний файл даного додатка відсутній, і питає про необхідність його створення.

2. Натисніть на кнопку Так, підтверджуючи необхідність створення файлу. Почнеться компіляція програми, по закінченні якої отриманий виконавчий файл буде запущений, і з'явиться вікно MS-DOS, в якому будуть відображені результати роботи програми. Це вікно наведено на рис. 1.4.

Рис 1.4 - Вікно повідомлення Microsoft Visual С + +

Рядок "Press any key to continue" (Натисніть будь-яку клавішу, щоб продовжити роботу), розташована після рядка "Hello World!", повідомляє користувачеві про те, що програма завершила роботу, і вікно залишається на екрані тільки для того, щоб користувач міг прочитати результати її роботи. Після того як користувач переконається, що програма коректно завершила свою роботу, йому досить натиснути на будь-яку клавішу, щоб закрити вікно MS-DOS і перейти до виконання інших завдань.

Останнє, четверте положення перемикача вибору генерується додатком - An application that supports MFC - служить для демонстрації того, що консольні додатки можуть використовувати функції з бібліотеки MFC, однак, оскільки дана бібліотека орієнтована, в основному, на роботу з вікнами і документами, велика її частина залишається незатребуваною консольним додатком. Для того щоб продемонструвати можливості цієї бібліотеки в даному типі додатка, рядок що виводиться на екран оформлений у вигляді строкового ресурсу. Таким чином, у цьому додатку генеруються файли реалізації, файли заголовків та файл опису ресурсів. Текст файлу реалізації даного додатка приведений в лістингу 1.3.

Лістинг 1.3. Консольний додаток, що використовує бібліотеку MFC

// Console.срр : Defines the entry point for the console application.

#include "stdafx.h" #include "Console.h"

#ifdef _DEBUG #define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = _FILE_;

#endif

////////////////////////////////////////////////////////////////////////

// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{

int nRetCode = 0;

// initialize MFC and print and error on failure

if (!AfxWinlnit (: :GetModuleHandle(NULL), NULL, : :GetCommandLine (), 0))

{

// TODO: change error code to suit your needs

cerr << _T("Fatal Error: MFC initialization failed") << endl;

nRetCode = 1;

}

else

{

// TODO: code your application's behavior here. CString strHello; strHello.LoadString(IDS HELLO); cout << (LPCTSTR)strHello << endl;

}

return nRetCode;

}

Порівнюючи листинги 1.2 і 1.3, слід звернути увагу, що в них обробка починається з виклику функції Afxwininit і перевірки повертаючої нею величини. Зазвичай ця функція викликається функцією winMain, яка є частиною бібліотеки MFC, і цей виклик відбувається в процесі ініціалізації об'єкту класу cwinApp. Оскільки консольні додатки не використовують функцію winMain, то в них необхідно безпосередньо викликати функцію Afxwininit для ініціалізації бібліотеки MFC.

При безпосередньому виклику користувачем функції Afxwininit в якості першого її параметра необхідно вказати дескриптор поточного модуля, в якому зберігається об'єкт класу cwinApp. У разі консольного додатку користувач може вибрати в якості поточного модуля об'єкт, похідний від класу cwinApp, або безпосередньо використовувати об'єкт класу cwinApp. Остання стратегія застосовується у тому випадку, коли вся обробка інформації зосереджена в функції main даного додатка.

Функція GetModuieHandie, використовувана в якості першого аргументу функції Afxwininit, повертає дескриптор модуля по імені файлу (.Ехе або .Dll), в якому міститься виконуваний код даного модуля. Якщо, як в даному випадку, параметром даної функції є null, то функція GetModuieHandie повертає дескриптор файлу, використаного для створення даного процесу.

Функція GetcommandLine, використовувана в якості третьої аргументу функції AfxWininit, повертає покажчик на командний рядок поточного процесу. Цей покажчик може бути використаний консольним процесом, оформленим у відповідності зі стандартом ANSI мови програмування С, для доступу до аргументів командного рядка за допомогою параметрів arge І argv, переданих функції main.

Якщо функція AfxWininit повертає значення false, то програма видає повідомлення про помилку з використанням стандартного потоку для виведення помилок і припиняє свою роботу. В іншому випадку формується об'єкт класу estring, описаного в бібліотеці MFC. В цей об'єкт, що має ім'я strHello, завантажується строковий ресурс ids_hello, а потім об'єкт виводиться на екран з використанням стандартного потоку виводу cout.

Процедура запуску програми на виконання і результати її роботи в основному аналогічні процедурі запуску і результатами роботи описаної до цього програми, не використовує класи MFC, тому немає ніякого сенсу описувати цю процедуру ще раз.

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

Використання консольного додатку

Іншою областю використання консольного застосування є тестування нових алгоритмів. Якщо ці тестовані алгоритми не пов'язані з виводом на екран графічної інформації, використання консольного застосування є кращим виходом із створення середовища для перевірки їх функціонування. Єдина незручність, пов'язана з необхідністю включення в файл ресурсів консольного застосування строкових ресурсів, до яких звертається користувальницька бібліотека програм, може бути легко усунуто використанням заголовних файлів » ресурсів, що включаються в цей файл.