КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Створення консольного додаткаЩоб створити заготівлю консольного додатка з використанням майстра: 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. Для цього замість фрагмента програми, що здійснює висновок рядка на екран, повинен розміщуватися текст користувацької програми.
|