- •Insert Project Into Workspace..
- •VisualComponentManager
- •Типи майстрів проектів
- •Void cLab_04 1Dlg::OnDel()
- •Void cLab 04 1Dlg::OnOptimum()
- •Int NumCars; //Количество автомобілів
- •Void cLab 04 1Dlg::OnOpen()
- •Void cLab_06Dlg::OnReplace(nmhdr* pNmhdr, lresult* pResult)
- •1.2. Функції бібліотеки math.Lib
- •Робота №1 Програмування лінійних алгоритмів
- •1.4. Індивідуальні завдання
- •Работа №2 Програмування алгоритмів, що розгалужуються
- •2.1. Логічні операції і операції порівняння
- •3.5. Приклад виконання роботи
- •4.3. Індивідуальні завдання
- •5.2. Операції над покажчиками
- •5.5. Індивідуальні завдання
- •Int strlen(st) – повертає довжину рядка st.
- •Int atoi(st) – перетворить рядок st в число цілого типа (int).
- •Return вираження;
- •8.2. Передача параметрів
- •8.3. Перевантаження функцій і покажчик на функцію
- •Hanr(n-1,s1,s3,s2);
- •Hanr(n-1,s3,s2,s1);
- •9.3. Індивідуальні завдання
- •Робота №10 Програмування з використанням файлів
- •10.1. Організація роботи з файлами
- •I або I ( десяткове, вісімкове або шістнадцятиричне ціле;
- •Void s_qs(tStudent st[], int n)
- •11.3. Індивідуальні завдання
- •Робота №15 Програмування з використанням двусвязанных списків
- •15.1. Черги на основі двусвязанных списків
- •Методика оцінювання робіт студентів
- •Литература
VisualComponentManager
Дана утиліта призначена для ведення бази даних готових програмних компонентів .
RegisterControl
Елементи управління OLE, як і інші OLE-серверы, можуть використовуватися різними застосуваннями, що підтримують технологію OLE. Але для цього необхідно зареєструвати бібліотеку типів і клас елементу управління, що якраз і виконує команда RegisterControl.
Customize..
При виборі даної команди відкривається діалогове вікно Customize, яке дозволяє набудовувати меню і панелі інструментів, а також призначати різним командам поєднання клавіш.
Options..
Дана команда відкриває вікно Options, в якому задаються різні параметри середовища VisualC++.
Macro... / Record... / Play..
Ці команди використовуються для створення і відтворення макросів на VBScript. Макроси є невеликими процедурами, що містять команди VBScript і що не приймають параметрів. Макроси дозволяють значно спростити і прискорити роботу в середовищі VisualC++.
Наприклад, ви можете записати у вигляді макросу деяку часто виконувану послідовність команд, внаслідок чого для здійснення того ж самого завдання вам досить буде ввести просту комбінацію клавіш або натискувати єдину кнопку панелі інструментів.
Меню Window
Всі команди меню Window(рис.9), за винятком команди DockingView, в принципі відповідають стандартному набору команд даного меню у всіх застосуваннях Windows.
Рис
9
NewWindow
Дана команда створює нове вікно редагування для поточного проекту.
Split
Команда Split дозволяє розбити вікно редагування на декілька частин.
DockingView
За допомогою цієї команди можна закріпити панель інструментів в будь-якого краю батьківського вікна або зробити її вільно переміщуваною.
Close
Дана команда закриває активне вікно. Якщо вміст вікна не був заздалегідь збережений, то буде видано застережливе повідомлення.
CloseAll
Ця команда закриває всі відкриті вікна. Якщо вміст хоч би один з вікон не було заздалегідь збережено у файлі, буде видано застережливе повідомлення.
Next
За допомогою команди Next, що відноситься до меню Window, можна перемикатися між відкритими вікнами.
Previous
Ця команда аналогічна команді Next, але на відміну від останньої здійснює переходи між вікнами в зворотному порядку.
Cascade
Дана команда відображує на екрані всі відкриті вікна каскадом, що дає можливість користувачам бачити імена файлів в заголовках всіх вікон.
TileHorizontally
Ця команда розташовує всі відкриті вікна одне над іншим. Такий вигляд відображення зручний для порівняння вихідного і модифікованого тексту програм.
TileVertically
Команда Тilе Vertically розташовує всі відкриті вікна поруч один з одним. Такий вигляд відображення зручний при необхідності провести порівняння ієрархічних структур.
Список відкритих вікон
У нижній частині меню показаний динамічно оновлюваний список всіх відкритих на даний момент вікон. Ви можете зробити активним будь-яке вікно, клацнувши на його імені в списку.
Меню Help
Меню Help (рис.10) містить стандартні для застосувань Windows команди Contents, Search і Index, а також деякі додаткові команди.
Рис 10
Contents / Search... / Index
Ці стандартні команди надають доступ до інтерактивної довідкової системи програми.
UseExtensionHelp
Коли включена дана опція, як довідкова система викликається розширений файл довідки, а не MSDN.
KeyboardMap..
Дана команда виводить список і опис всіх команд VisualC++ з переліком пов'язаних з ними поєднань клавіш.
Tip of the Day..
Команда TipoftheDay... виводить вікно з різними порадами, що стосуються роботи в середовищі VisualC++.
TechnicalSupport
Дана команда відображує розділ довідкової системи, присвячений питанням технічної підтримки.
Microsoft on the Web
У цьому підміню містяться команди переходу до Web-страницам в Internet, присвяченим VisualC++ і різним технічним питанням.
About Visual C++
About... — стандартна команда всіх застосувань Windows - відображує інформацію про версію програми, авторські права, зареєстрованого користувача і встановлених додаткових компонентах
-
Створення вашої першої програми
-
Збереження файлу
-
Створення виконуваного файлу
Додавання файлів у проект
-
Побудову програми
-
Відладка програми
-
Застережливі повідомлення
-
Перше повідомлення про помилку
-
Використання команд Find і Replace
-
Швидке виявлення помилкових рядків
-
Продовження відладки
-
Запуск програми
-
Використання вбудованого відладчика
-
Додаткові засоби відладки
-
Робота з точками останову
-
Вікно QuickWatch
Написання, компіляція і відладка простої програми
Створення першої програми
Перше, що необхідно зробити, приступаючи до роботи над новою програмою, — це створити новий проект. Для цього в меню File задайте команду New..., а в діалоговому вікні New, що відкрилося, виберіть вкладку Projects (рис. 1)
Рис 1. Вибір типа проекту
Тепер необхідно ввести ім'я файлу проекту. Віднесіться до даного моменту серйозно, оскільки це ім'я згодом буде використано при побудові виконуваного файлу застосування.
Наступний крок полягає у вказівці типа проекту. У нашому випадку це буде просте консольне застосування — Win32 ConsoleApplication. У текстовому полі Location вкажіть теку, яку система автоматично створить для файлів нового проекту.
Далі необхідно вказати платформу, для якої створюється проект. Для 32-розрядної версії компілятора VisualC++ в полі Platforms за умовчанням задана опція Win32.
Після того, як ви натискуватимете кнопку ОК, відображуватиметься вікно майстра з набором опцій (рис. 2).
Рис. 2. Вікно, що з'являється після вибору типа проекту Win32 Console Application Оскільки ми створюватимемо проект з нуля, виберіть опцію Anempty project і клацніть на кнопці Finish. Далі можете просто клацнути на кнопці, розташованій першій зліва на стандартній панелі інструментів. Коли перед вами відкриється нове вікно редагування, введіть такий код:
/* ПРИМІТКА: дана програма містить помилки */
/* введені з метою виучити вас использованию*/
/* засобів відладки */
#include <stdio.h>
/* Наступна константа визначає розмір масиву */
#define SIZE 5
/* Прототип функції */
void print_them(int offset, char continue, -int iarray[SIZE]);
void main( void ){
intoffset; /* індекс елементу масиву */
int iarray[SIZE]; /* масив чисел */
charcontinue= 0; /* містить відповідь користувача */
/* Перший раз функція виводить значення неініціалізованих змінних
*/ print_them(offset,continue, iarray);
/* Запрошення для користувача */
Printf(\n\nWelcome to а trace demonstration!");
printf("\nWould you like to continue (Y/N)");
scanf("%c",continue);
/* Користувач вводить нові значення в массив*/
if (continue== 'Y' )
for (offset=0; offset < SIZE, offset++) { printf ("\nPlease enter an
integer: "); scanf("%d",siarray [of f set] );
/* Другий раз функція відображує значення, введені користувачем */
print_them{offset, continue, iarray) ;
/* Функція, що виводить значення елементів масиву */
void print_them(int offset, char continue, int iarray[SIZE])
{
printf("\n\n%d",offset);
printf("\n\n%d",continue);
for(offset=0; offset < SIZE, offset++)
printf("\n%d",iarray[offset]); }
Якщо ви добре знайомі з мовою З, то напевно відмітили в програмі помилки. Не виправляйте їх. Вони були допущені спеціально, з метою виучити вас використанню різних засобів відладки.
Збереження файлу
Бажано зберегти файл до того, як ви приступите до його компіляції і компоновки, а тим більше до того, як спробуєте запустити програму на виконання. Дослідні програмісти можуть розповісти багато сумних історій про тих, хто намагався запустити на виконання незбережені файли, після чого, унаслідок непередбачених фатальних помилок, роботу над застосуванням доводилося починати спочатку.
Аби зберегти введений тільки що код, ви можете або клацнути на третій кнопці зліва на стандартній панелі інструментів, або вибрати в меню File команду Save, або натискувати [Ctrl+S]. Коли ви вперше вибираєте команду Save, відкривається діалогове вікно Save.
Збережете файл під ім'ям ERROR.C
На рис. 3 вікно редагування показане до збереження файлу. Після збереження в рядку заголовка вікна відображуватиметься нове ім'я файлу.

Рис 3. Вікно редагування до того, як його вміст буде збережений у файлі
Створення виконуваного файлу
Як правило, проекти для Windows 3.x, Windows95/98 і Windows, NT включають велике число файлів. Але зараз ми почали роботу над простою програмою, що складається з єдиного файлу. Цього цілком достатньо, аби розібратися з основними етапами створення повноцінного застосування на C/C++.
Додавання файлів в проект
Після того, як проект створений, в нього можна відразу ж додавати нові файли. Перейдіть на вкладку FileView і клацніть правою кнопкою миші на елементі ERRORfiles. Контекстне меню з виділеною командою AddFilestoProject..., яке при цьому відкриється, показано на рис. 4.
При виборі даної команди з'являється вікно InsertFilesintoProject, де ви можете відзначити файли, що підлягають включенню в проект. Одне зауваження з приводу типа файлів: файли заголовків (з розширенням Н) не включаються в список файлів проекту, а додаються в проект безпосередньо під час побудови програми за допомогою директив препроцесора #include.
У нашому випадку потрібно знайти створений раніше файл ERROR.C і виконати на нім подвійне клацання, внаслідок чого файл автоматично буде доданий в проект.

Рис 4. Меню, що містить команду Add files to Project ..
Рис. 5. Додавання файлу ERROR.C у проект
Побудова програми
Після створення вихідного файлу можна приступити до створення файлу виконуваного.
Згідно термінології розробників VisualC++, цей процес називається побудовою програми. Звернемося до показаного на рис.6 меню Build з виділеною командою.
RebuildAll
Єдина відмінність між командами Build і RebuildAll, як ви пам'ятаєте, полягає в тому, що команда RebuildAllне перевіряє дату створення використовуваних в проекті файлів, т.е компілює і компонує всі файли проекту, незалежно від того, коли вони були створені .
Аби уникнути непорозумінь, пов'язаних з тим, що системний час комп'ютера може бути легко змінений, при роботі з невеликими застосуваннями рекомендується використовувати команду RebuildAll.

Рис. 6. Команда RebuildAll виконає компіляцію і компоновку файлів нового застосування
Відладка програми
Якщо в програмі були допущені синтаксичні помилки, при виконанні команд Build і RebuildAll повідомлення про них відображуватимуться на вкладці Build вікна Output (мал.7).
Мал. 7. Виведення повідомлень про помилки у вікні VisualC++
Кожне повідомлення починається з вказівки імені файлу. Оскільки застосування Windows зазвичай містять багато файлів, це дуже коштовна властивість. Відразу за ім'ям файлу, в круглих дужках, вказаний номер рядка, в якому була виявлена помилка. У нашому випадку перша помилка знайдена у восьмому рядку. Після номера рядка, за двокрапкою, йдуть слово error або warning і номер помилки. Різниця між повідомленнями error і warning полягає в тому, що програми з попередженнями можуть бути виконані, а застосування з помилками обов'язково вимагають виправлень. В кінці кожного рядка повідомлення дається короткий опис виявленої помилки.
Застережливі повідомлення
Застережливі повідомлення можуть з'являтися в тих випадках, коли компілятор автоматично виконує деякі стандартні перетворення і повідомляє про це програміста. Наприклад, якщо змінній типа int (ціле число) буде привласнено дробове значення, то автоматично станеться округлення. Це не означає, що в програмі допущена помилка, але оскільки перетворення типів даних відбувається непомітно для програміста, компілятор вважає своїм обов'язком повідомити про це. Наведемо ще один приклад. Більшість функцій, оголошених у файлі МАТН.Н, приймають аргументи і повертають значення типа double (дійсне число подвійної точності). Якщо програма передасть одній з таких функцій аргумент типа float(дійсне число одинарної точності), компілятор, перш ніж направити дані в стек аргументів функції, виведе застережливе повідомлення про те, що тип даних float був перетворений в double.
Ви можете запобігти появі застережливих повідомлень, якщо явно перетворюватимете типів даних змінних відповідно до правил, прийнятих в мові С.
Так, в даному випадку явне приведення аргументів до типа даних double перед виконанням функції запобіжить появі застережливого повідомлення.
Перше повідомлення про помилку
Повідомлення про помилку, представлене на мал. 3.7, є сповна типовим. Найчастіше з ним доводиться стикатися тим, хто лише освоює нову мову програмування. В даному випадку програміст спробував задати змінній ім'я, зарезервоване для ключового слова. Це хороший принцип — привласнювати змінним імена, співзвучні з їх призначенням, проте вибране нами ім'я вступило в конфлікт з ключовим словом continue, що існує в C/C++.
Використання команд Find і Replace
Досить часто в процесі програмування виникають ситуації, коли вам потрібно знайти і замінити якесь слово в тексті програми. Ви, звичайно ж, можете зробити це за допомогою діалогового вікна, що відкривається командою Replace... з меню Edit, але є і швидший спосіб. Розглянете уважно панель інструментів, показану на рис.8, і знайдіть в полі списку Find слово continue.
Аби скористатися цим засобом пошуку, клацніть мишею в полі і введіть слово, яке хочете знайти, після чого натискуйте [Enter]. На рис. 8 показаний результат такого пошуку. У тексті програми виділено слово continue, виявлене першим.
Рис. 8. Використання засобів швидкого пошуку
Даний метод досить зручний для пошуку потрібного слова. Але наше завдання цим не обмежується, оскільки ім'я змінної continue нам необхідно замінити у всій програмі іншим ім'ям. В такому разі доцільніше скористатися командою Replace... з меню Edit (рис.9).
Рис. 9. Вікно пошуку
Наша мета полягає в тому, аби замінити ім'я змінної continue словом, також вказувало б на призначення цією змінною. З цією метою введемо в поле Replacewith слово continuе. Але залишилася маленька проблема. У програмі є рядок "\nWould you like to continue (Y/N)". Якщо ви виконаєте автоматичну заміну у всьому файлі, клацнувши на кнопці ReplaceAll, то повідомлення, що видається програмою, міститиме, граматичну помилку. Тому заміну слід проводити послідовно, переходячи від слова до слова, а у вказаному місці клацнути на кнопці FindNext.
Швидке виявлення помилкових рядків
Тепер необхідно виконати повторну компіляцію програми, після якої вікно повідомлень виглядатиме так, як показано на рис.10.
Існує досить швидкий спосіб переходу від вікна повідомлень до вікна редагування, і ми вам про нього розповімо. Помістите курсор на рядку повідомлення, що цікавить вас, наприклад на першому попередженні: warning. C4013: 'Printf undefined;..,
А тепер просто натискуйте [Enter]. Курсор у вікні редагування буде автоматично поміщений в рядок програми, що викликав появу повідомлення про помилку, а зліва від рядка з'явиться стрілка (рис. 11).
Як ви вже знаєте, мови C/C++ чутливі до регістра символів. Тому компілятор абсолютно точно встановив причину помилки. Перша буква функції printf() у нашій програмі помилково була введена у верхньому регістрі. Компілятор, звичайно ж, не зміг знайти в бібліотеці функцію Printf().Эту помилку неважко виправити — досить замінити букву Р буквою р. Потім обов'язково збережете файл.

Рис. 11. Помічений стрілкою рядок програмного коду, що містить помилку
Продовження відладки
Після того, як ви внесли виправлення, програма готова до нової спроби побудувати виконуваний файл. Перейдіть в меню Project і знов виберіть команду RebuildAll. На рис. 12 показано оновлене вікно повідомлень.
Рис.12. Вікно повідомлень під час третьої спроби побудувати виконуваний файл.
Тепер виявляємо, що той же рядок, який містив некоректне ім'я функції (Printf()),заключает в собі ще одну помилку. У C/C++ всі строкові значення повинні братися в подвійні лапки. Значить, в нашому випадку відкриваючі лапки у функції printf () слід поставити відразу після відкриваючої круглої дужки, тобто рядок повинен починатися таким чином: printf(". Збережете файл і спробуйте ще раз побудувати програму. Як виглядає вікно повідомлень після чергового оновлення, показано на рис. 13.

Рис. 3.13. Вікно повідомлень під час четвертої спроби побудувати виконуваний файл Цього разу видається таке повідомлення про помилку:
syntax error: missing ';'before ')'
У C/C++, на відміну від Pascal, символ крапки з комою використовується для позначення закінчення вираження, а не як роздільник. Таким чином, в кінці другої перевірки в циклі for необхідно ввести крапку з комою. Після виправлення збережете файл і знов виконаєте команду RebuildAll.
Все гаразд? Судячи по вікну повідомлень, в компілятора немає більше претензій до вашої програми, і команда RebuildAll успішно згенерувала виконуваний файл ERROR.EXE.
У вікні повідомлень мають бути відсутніми повідомлення про помилки, але бути присутнім одне попередження, яке можна проігнорувати. Якщо це не так, значить, ви допустили помилки при введенні програми. Перевірте програмний код і виправіть його.
Запуск програми
Аби запустити програму, просто виберіть в меню Project команду Execute. Якщо у відповідь на запит програми Would you like to continue(Y/N) ви натискуватимете клавішу [Y], а потім [Enter], на екрані відображуватиметься наступне:
-858993460
0
-858993460
-858993460
-858993460
-858993460
-858993460
Welcome to а trace demonstration! Would you like to continue (Y/N) в
На рис.14 показано, що станеться далі.

Рис. 14. Повідомлення про помилку виконання програми
Використання вбудованого відладчика
Створена нами програма на початку своєї роботи відображує на екрані вихідний вміст масиву даних, після чого запитує, чи хочете ви продовжити роботу. Відповідь Y (yes— так) сигналізує про те, що ви хочете заповнити масив власними даними і відображувати їх на екрані.
З рис.14 можна зробити вивід про те, що хоча програмний код набраний абсолютно правильно, тобто в нім немає синтаксичних помилок, програма працює не так, як нам би хотілося. Помилки такого роду називаються логічними. На щастя, вбудований в VisualC++ відладчик містить ряд засобів, які послужать для вас рятувальним кругом в подібній ситуації. По-перше, ви можете виконувати програму покроково, рядок за рядком. По-друге, вам надається можливість аналізувати значення змінних у будь-який момент виконання програми.
Різниця між командами StepInto і StepOver
Коли ви починаєте процес відладки, з'являється панель інструментів Debug. З безлічі представлених на ній кнопок найчастіше задіюються StepInto (четверта справа у верхньому ряду) і StepOver(третя справа). У обох випадках програма буде запущена на виконання в покроковому режимі, а в тексті програми виділяється той рядок, який зараз буде виконаний.
Відмінності між командами StepInto і StepOver виявляються лише тоді, коли в програмі зустрічається виклик функції. Якщо вибрати команду StepInto, то відладчик увійде до функції і почне виконувати крок за кроком всіх її операторів. При виборі команди StepOver відладчик виконає функцію як єдине ціле і перейде до рядка, наступного за викликом функції.
Ц
ю
команду зручно застосовувати в тих
випадках, коли в програмі робиться
звернення до стандартної функції або
створеної вами підпрограми, яка вже
була протестована.
Давайте виконаємо покрокову відладку нашої програми.
Як видно з рис.15, у вікні редагування з'явилася стрілка (її називають індикатором трасування), вказуюча на рядок програми, яка буде виконана на наступному кроці. В даний момент вона вказує на функцію print_them().
Рис. 3.15. Вікно редагування після того, як тричі була виконана команда StepInto або StepOver
Має сенс виконати цю функцію як одне ціле. Для цього виберемо команду StepOver. Функція буде виконана, і індикатор трасування вкаже на перший виклик функції printf(). Тепер три рази натискуйте клавішу [F10], поки стрілка не зупиниться напроти функції scanf().
У цей момент вам потрібно перейти у вікно програми і у відповідь на запрошення Would you like to continue(Y/N) ввести Y і натискувати [Enter] (рис. 16).
Відразу після цього на екрані з'явиться повідомлення про помилку (рис.17). Це повідомлення згенерувало програмою після спроби виконає функцію scanf(). Давайте спробуємо розібратися, в чому, власне, полягає проблема.
Рис.16. Введіть "Y" і натискуйте [Enter], аби продовжити виконання програми

Рис.17. Відладчик повідомляє про помилку в програмі
Помилка пов'язана з некоректним використанням функції scanf(). Функція scanf() чекає вказівки адреси елементу пам'яті для заповнення. Розглянемо таке вираження: scanf("%C", continu);
Як бачите, тут вказується не адреса змінної, а сама змінна. Аби вказати адресу, потрібно помістити оператора узяття адреси (&) перед continu. Внесіть виправлення до вираження, аби воно виглядало таким чином: scanf("%C" &continu);
Збережете файл і знов виберіть команду RebuildAll.
Додаткові засоби відладки
Ви, вочевидь, чули про точки останову, які застосовуються в програмі при необхідності перервати її виконання в певних місцях. Сенс використання точок останову полягає в тому, що відладчик не витрачає часу на покрокове виконання програми аж до вказаної крапки, після досягнення якої переходить в покроковий режим.
Точки останову найпростіше розставляти за допомогою кнопки Breakpoint (перша справа) панелі інструментів Build. Для цього досить встановити курсор на потрібному рядку програми і клацнути на вказаній кнопці. Якщо ж виділений рядок вже містить точку останову, то після клацання на кнопці Breakpoint вона, точка останову, буде видалена. При виборі команди Go програма виконуватиметься від поточного місця розташування курсора до найближчої точки останову.
Звернемося до нашої програми. Ми знаємо, що всі рядки програми до виклику функції scanf() відмінно працюють. Аби не витрачати час на покрокове виконання всіх рядків, які вже були перевірені раніше, поставимо точку останову на 20-му рядку, що містить виклик функції scanf().
Є і інший спосіб завдання точок останову — за допомогою діалогового вікна Breakpoints (рис. 18), що викликається командою Breakpoints... з меню Edit. За умовчанням при клацанні на кнопці із стрілкою відкривається контекстне меню, в якому першим пунктом вказується команда створення точки останову на тому рядку, де в даний момент у вікні редагування знаходиться курсор. У нашому випадку це рядок 20.
Рис.18. Завдання точки останову
Робота з точками останову
Передбачимо, що ви поставили точку останову в рядку програми, що містить виклик функції scanf{). Тепер виберіть команду Go— або з меню, або натискує клавішу [F5]. Звернете увагу, що виконання програми уривається не на першому рядку програми, а на рядку, що містить точку останову.
Далі можна продовжити виконання програми в покроковому режимі або проаналізувати поточні значення змінних. Нас цікавить, чи буде функція scanf() працювати коректно після того, як до програмного коду були внесені зміни. Виберіть команду StepOver, перейдіть до вікна програми, введіть букву Y у верхньому регістрі і натискуйте клавішу [Enter]. (Ми застосували команду StepOverдля того, аби уникнути покрокового аналізу відладчиком всіх операторів функції scanf(). При виборі команди StepIn з'являється пропозиція вказати місцезнаходження файлу SCANF.C) Все відмінно! Відладчик не видав вікна з повідомленням про помилку. Але чи означає це, що всі проблеми дозволені? Аби відповісти на це питання, досить буде проаналізувати поточне значення змінної continuе.
Вікно QuickWatch
Команда QuickWatch... відкриває діалогове вікно QuickWatch(мал. 3.19), яке дозволяє по ходу виконання програми аналізувати значення змінних. Простий спосіб визначити значення змінної за допомогою даного вікна полягає в тому, що курсор поміщається на імені змінної у вікні редагування, а потім натискується комбінація клавіш [Shift+F9]. Виконайте вказану операцію із змінною continu.
Рис. 19. Діалогове вікно QuickWatch
Тепер, коли ми визначили, що змінна continuе має правильне значення, можна продовжити виконання програми до кінця, вибравши в меню Debug команду Go (рис. 20).
Рис. 20. Виправлена версія програми
Частина II
У зв'язку з тим, що сьогодні рівень складності програмного забезпечення дуже високий, розробка застосувань Windows з використанням лише якої-небудь мови програмування (наприклад, мови C) значно важко. Програміст повинен витратити масу часу на вирішення стандартних завдань по створенню багатовіконного інтерфейсу. Реалізація технології скріплення і вбудовування об'єктів - OLE - зажадає від програміста ще складнішої роботи.
Аби полегшити роботу програміста практично всі сучасні компілятори з мови C++ містять спеціальні бібліотеки класів. Такі бібліотеки включають практично весь програмний інтерфейс Windows і дозволяють користуватися при програмуванні засобами більш високого рівня, ніж звичайні виклики функцій. За рахунок цього значно спрощується розробка застосувань, що мають складний інтерфейс користувача, полегшується підтримка технології OLE і взаємодія з базами даних.
Подібні засоби автоматизованого створення застосувань включені в компілятор Microsoft Visual C++ і називаються MFC AppWizard. Заповнивши декілька діалогових панелей, можна вказати характеристики застосування і отримати його тексти, забезпечені обширними коментарями. MFC AppWizard дозволяє створювати одновіконні і багатовіконні застосування, а також застосування, що не мають головного вікна, -вместо його використовується діалогова панель. Можна також включити підтримку технології OLE, баз даних, довідкової системи.
Звичайно, MFC AppWizard не всесильний. Прикладну частину застосування програмістові доведеться розробляти самостійно. Вихідний текст застосування, створений MFC AppWizard, стане лише основою, до якої потрібно підключити останнє. Але працюючий шаблон застосування - це вже половина всієї роботи. Вихідні тексти застосувань, автоматично отриманих від MFC AppWizard, можуть складати сотні рядків тексту. Набор його уручну був би дуже утомливий.
Потрібно відзначити, що MFC AppWizard створює тексти застосувань лише з використанням бібліотеки класів MFC (Microsoft Foundation Class library). Тому лише вивчивши мову C++ і бібліотеку MFC, можна користуватися засобами автоматизованої розробки і створювати свої застосування в найкоротші терміни.
Бібліотеки динамічного завантаження (DLL)
Оскільки API складається з великого числа функцій, може скластися враження, що при компіляції кожної програми, написаної для Windows, до неї підключається код досить значного об'єму. Насправді це не так. Функції API містяться вбиблиотеках динамічного завантаження (Dynamic Link Libraries, або DLL), які завантажуються в пам'ять лише в той момент, коли до них відбувається звернення, тобто при виконанні програми. Розглянемо, як здійснюється механізм динамічного завантаження.
Динамічне завантаження забезпечує ряд істотних переваг. По-перше, оскільки практично всі програми використовують API-функции, то завдяки DLL-библиотекам істотно економиться дисковий простір, який інакше займався б великою кількістю коди, що повторюється, міститься в кожному з виконуваних файлів. По-друге, зміни і поліпшення в Windows-приложениях зводяться до оновлення лише вмісту DLL-библиотек. Вже існуючі тексти програм не вимагають перекомпіляції.
Переваги використання MFC
Як уже згадувалося, MFC – це базовий набір (бібліотека) класів, написаних на мові С++ і призначених для спрощення і прискорення процесу програмування для Windows. Бібліотека містить багаторівневу ієрархію класів, що налічує близько 200 членів. Вони дають можливість створювати Windows-приложения на базі об'єктно-орієнтованого підходу. З точки зору програміста, MFC є каркасом, на основі якого можна писати програми для Windows.
Бібліотека MFC розроблялася для спрощення завдань, що стоять перед програмістом. Як відомо, традиційний метод програмування під Windows вимагає написання досить довгих і складних програм, що мають ряд специфічних особливостей. Зокрема, для створення лише каркаса програми таким методом знадобиться близько 75 рядків коди. По мірі ж збільшення складності програми її код може досягати воістину неймовірних розмірів. Проте та ж сама програма, написана з використанням MFC, буде приблизно в три рази менше, оскільки більшість приватних деталей прихована від програміста.
Однією з основних переваг роботи з MFC є можливість багатократного використання однієї і тієї ж коди. Оскільки бібліотека містить багато елементів, загальних для всіх Windows-приложений, немає необхідності кожного разу писати їх заново. Замість цього їх можна просто успадковувати (кажучи мовою об'єктно-орієнтованого програмування). Крім того, інтерфейс, що забезпечується бібліотекою, практично незалежний від конкретних деталей, що його реалізовують. Тому програми, написані на основі MFC, можуть бути легко адаптовані до нових версій Windows (на відміну від більшості програм, написаних звичайними методами).
Ще однією істотною перевагою MFC є спрощення взаємодії з прикладним програмним інтерфейсом (API) Windows. Будь-яке застосування взаємодіє з Windows через API, який містить декілька сотів функцій. Значний розмір API утрудняє спроби зрозуміти і вивчити його целіком. Частенько навіть складно прослідити, як окремі частини API связанны один з одним! Але оскільки бібліотека MFC об'єднує (шляхом інкапсуляції) функції API в логічно організовану безліч класів, інтерфейсом легшає значно управляти.
Оскільки MFC є набором класів, написаних на мові С++, тому програми, написані з використанням MFC, має бути в той же час програмами на С++. Для цього необхідно володіти відповідними знаннями. Спершу необхідний уміти створювати власні класи, розуміти принципи спадкоємства і уміти перевизначати віртуальні функції. Хоча програми, що використовують бібліотеку MFC, зазвичай не містять дуже специфічних елементів з арсеналу С++, для їх написання проте потрібні солідні знання в даної області.
Зауваження. Невелике число класів, визначених в бібліотеці, не пов'язаний безпосередньо з програмуванням під Windows. Це, зокрема, класи, призначені для створення рядків, управління файлами і обробки особливих ситуацій. Інколи звані класами загального призначення, вони можуть використовуватися як Windows-, так і не- Windows-застосуваннями.
Про принципи пристрою застосування розповідалося вище. Тепер розглянемо, як воно створюється за допомогою Visual C++. Спочатку розберемо одне важливе поняття - проект. До цих пір застосування розглядалося, як тільки як сукупність об'єктів базових і похідних класів. Але для забезпечення роботи застосування потрібне щось більше - разом з описом класів необхідний опис ресурсів, пов'язаних із застосуванням, потрібна довідкова система і тому подібне Термін "проект" якраз і використовується, коли мається на увазі такий загальніший погляд на застосування.
У середовищі Visual C++ можна будувати різних типів проектів. Такі проекти після їх створення можна компілювати і запускати на виконання. Фірма Microsoft розробила спеціальний інструментарій, що полегшує і прискорюючий створення проектів в середовищі Visual C++. Наприклад, майстер MFC AppWizard (exe) дозволяє створити проект Windows-приложения яке має одиндокументний, багатодокументний або діалоговий інтерфейс і використовує бібліотеку MFC.
Створюваний остов застосування складений так, що в подальшій роботі з проектом можна використовувати інший інструментальний засіб - ClassWizard (майстер класів), призначене для створення остовів нових похідних класів. Ще одне основне призначення ClassWizard в тому, що він створює остови для перевизначуваних методів. Він дозволяє показати всі повідомлення, що приходять класу, і створити остов обробника будь-якого з цих повідомлень. Це лише дві основні функції ClassWizard. Він не всесильний, але його можливості досить великі.
