
- •1А. Побудова проекту додатка без майстра.
- •1Б. Побудова windows-додаткa за допомогою майстра
- •2. Розробка windows-додатку з діалоговим вікном
- •3.Програмування простих арифметичних виразів
- •Завдання до лабораторної роботи:
- •4.Створення файлів даних
- •Void cMyAppView::OnDraw(cdc* pDc)
- •Використання постійних наборів даних. Серіалізація
- •6.Робота з клавіатурою та мишою.
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •Void cLab6View::OnChar(uint nChar, uint nRepCnt, uint nFlags)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cCenteredView::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •Void cLab6View::OnDraw(cdc* pDc)
- •If(!CaretCreated)
- •Void cLab6View::OnKillFocus(cWnd* pNewWnd)
- •Void cLab6View::OnSetFocus(cWnd* pOldWnd)
- •7.Обробка текстових даних.
- •Void cTextView::OnDraw(cdc* pDc)
- •8.Обробка одномірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •9. Обробка двомірних масивів.
- •Void cMasView::OnDraw(cdc* pDc)
- •Void cMasView::OnDraw(cdc* pDc)
- •10. Функції. Перевантаження та шаблони функцій.
- •Додаток1.Пояснення архітектури документ/облік
- •Додаток2.Аналіз коду, створеного майстром у lab4
- •MainFrm.H и MainFrm.Cpp
- •Lab4View.H та lab4View.Cpp
- •Список літератури
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»
МЕТОДИЧНІ ВКАЗІВКИ
до виконання лабораторних робіт з дисципліни:
«Інформатика. Програмування та алгоритмічні мови»
для студентів всіх форм навчання
Київ – 2013
МЕТОДИЧНІ ВКАЗІВКИ
до виконання лабораторних робіт з дисципліни:
«Інформатика.Програмування та алгоритмічні мови»
для студентів всіх форм навчання
Укладач: Недашківська Лариса Михайлівна, ст.викл.
Відповідальний
за випуск Л.Д.Писаренко, докт.техн.наук
Рецензент: І.В.Мельник, докт.техн.наук.
Методичні вказівки до виконання лабораторних робіт з дисципліни «Інформатика. Програмування та алгоритмічні мови», Л.М.Недашківська, К.-НТУУ «КПІ», 2013, 126с.
МЕТОДИЧНІ ВКАЗІВКИ
до виконання лабораторних робіт з дисципліни:
«Інформатика.Програмування та алгоритмічні мови»
для студентів всіх форм навчання
Укладач: Недашківська Лариса Михайлівна, ст.викл.
Відповідальний
за випуск Л.Д.Писаренко, докт.техн.наук
Рецензент: І.В.Мельник, докт.техн.наук.
ЗМІСТ
1а. ПОБУДОВА ПРОЕКТУ ДОДАТКА БЕЗ МАЙСТРА. 6
1б. ПОБУДОВА WINDOWS-ДОДАТКA ЗА ДОПОМОГОЮ МАЙСТРА 16
2. РОЗРОБКА WINDOWS-ДОДАТКУ З ДІАЛОГОВИМ ВІКНОМ 27
3.ПРОГРАМУВАННЯ ПРОСТИХ АРИФМЕТИЧНИХ ВИРАЗІВ 39
6.РОБОТА З КЛАВІАТУРОЮ ТА МИШОЮ. 52
7.ОБРОБКА ТЕКСТОВИХ ДАНИХ. 71
8.ОБРОБКА ОДНОМІРНИХ МАСИВІВ. 75
9. ОБРОБКА ДВОМІРНИХ МАСИВІВ. 80
10. ФУНКЦІЇ. ПЕРЕВАНТАЖЕННЯ ТА ШАБЛОНИ ФУНКЦІЙ. 85
ДОДАТОК1.ПОЯСНЕННЯ АРХІТЕКТУРИ ДОКУМЕНТ/ОБЛІК 91
ДОДАТОК2.АНАЛІЗ КОДУ, СТВОРЕНОГО МАЙСТРОМ У LAB4 96
СПИСОК ЛІТЕРАТУРИ 136
ОБГРУНТУВАННЯ ПОТРЕБИ У ЛАБОРАТОРНОМУ ПРАКТИКУМІ
Рівень складності програмного забезпечення у наш час надто високий. Розробка додатків для середовища Windows з використанням тільки деякої мови програмування ( наприклад мови С++) досить ускладнена, оскільки програміст повинен витратити немало часу на вирішення стандартних задач побудови багатовіконного інтерфейсу.
Для полегшення роботи програміста практично всі компілятори з мови С++ оснащені спеціальними бібліотеками класів, які містять практично весь програмний інтерфейс Windows і надають можливості користування при програмуванні засобами вищого рівня, ніж звичайні виклики функцій. Завдяки таким бібліотекам значно спрощується розробка додатків, оснащених складним інтерфейсом користувача.
У даних методичних вказівках особлива увага приділяється використанню майстра проектів MFC AppWizard для створення каркасів однодокументних додатків, редагування створеного каркасу відповідно до потреб користувача, знайомству зі зручними типами, динамічними бібліотеками та.ін. Вказані засоби стануть у пригоді тим програмістам, які писатимуть невеликі програми з використанням можливостей мови С++. Продовження лабораторного практикуму відбудеться при вивченні класів, тобто у 3 семестрі. Основною метою даних методичних вказівок є використання теоретичних знань, отриманих на лекціях з дисципліни, при написанні програмних засобів у середовищі Windows.
1А. Побудова проекту додатка без майстра.
Мета роботи – навчитися будувати найпростіший інтерфейс для спілкування з програмою за допомогою майстра проектів Win32 Application
Пояснення до виконання лабораторної роботи.
Для побудови нового проекту потрібно вибрати пункт головного меню File/New та перейти на сторінку Projects,.де вибрати Win32 Application, ввести ім’я проекту step1, вказати робочу папку для нового проекту та натиснути клавішу OK, як це показано на Рис 1а.1.
Рис. 1а.1. Вміст сторінки Projects.
Після вказаних дій виникне віконце майстра проектів Win32 Application. Де потрібно вибрати порожній проект - An Empty Project (Рис.1а.2).
Рис.1а.2. Вибір типу додатку
Натиснувши кнопку Finish підтвердимо власний вибір. Натиснути клавішу ОК у вікні New Project Information. Система програмування Visual C++ побудує набір файлів, потрібних для роботи з проектом і його поєднання.
Таким чином ми отримали порожній проект (Рис.1а.3), який потрібно заповнити файлами, а саме: додати до створеного проекту файл, у якому буде початковий код.
Рис.1а.3. Вікно порожнього проекту
Оскільки ми вибрали порожній проект і нам потрібен cpp файл у цьому проекті, тому перейдемо на вкладинку FileView та клацнемо правою кнопкою миші на step1 files. У контекстному меню, яке відчиниться, виберемо пункт Add File to Project. (рис.1а.4)
Рис.1а.4. Контекстне вікно додавання файла до проекту
Виникне діалогове вікно додавання файлу до проекту Insert Files Into Project. У нас файлу немає. Тому просто напишемо його ім’я та натиснемо OK (Рис.1а.5).
Рис.1а.5. Збереження створеного файла у папці проекту
Після натиснення клавіші ОК на екрані виникне вікно (Рис.1а.6).
Рис.1а.6. Вікно для створення нового файла
Потрібно натиснути клавішу Yes та підтвердити створення нового файла з заданим іменем.
Тепер потрібно налаштувати проект таким чином, щоб він міг використовувати бібліотеку MFC (Microsoft Fundations Classes). Це дуже важливо. MFC записана у DLL файлах. І, якщо проект буде використовувати MFC, тоді потрібно це вказати для того, щоб компілятор міг приєднувати потрібні LIB файли з посиланнями на функції в DLL. якщо цього не зробити, тоді проект не буде об’єднаним. У вікні Build з’являться такі помилки.
Linking...
nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Release/step1.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Потрібно зайти в меню Project, а потім Setting (Рис.1а.5).
Рис.1а.7. Вибір установок команди Project
Перевіримо підтримку MFC для всіх типів (Setting For).
Рис.1а.8. Приєднання бібліотеки MFC до проекту
Можна встановлювати такі режими роботи програми: Not Using MFC – тоді будуть використовуватися функції АРІ, або Use MFC in a Static Library(Рис.1а.8) – тоді застосовуються бібліотеки класів, що містять ті ж функції АРІ, але записані у вигляді методів класів, що дає можливість автоматизувати процес розробки інтерфейсу програми.
Для того, щою відкрити файл step1.cpp двічі клацнемо на імені файла. На екрані виникне вікно (Рис.1а.9) з запитом, чи потрібно створити фізичний файл на диску:
Рис.1а.9. Запит про фізичне створення файла на диску.
Відповісти Yes , після цього курсор перейде у вікно редактора текстів.
Запишемо текст програми, тобто вміст файлу step1.cpp
У створеному файлі step1.cpp запишемо код.
#include "afxwin.h" // MFC Основні і стандартні компоненти
class CMainWnd : public CFrameWnd
{public:
CMainWnd(); // Конструктор за замовчуванням
};
CMainWnd::CMainWnd()
{Create(NULL,"Step1",WS_OVERLAPPEDWINDOW, rectDefault, NULL,NULL); // Створити вікно програми
}
class CMyApp : public CWinApp
{public:
CMyApp(); //конструктор за замовчуванням
virtual BOOL InitInstance(); //стандартне ініціювання
};
CMyApp::CMyApp() // конструктор головного класу додатку
{}
BOOL CMyApp::InitInstance() // стандартне ініціювання
{m_pMainWnd=new CMainWnd();// зареєструвати клас вікна
ASSERT(m_pMainWnd); // перевірити його коректність
m_pMainWnd->ShowWindow(SW_SHOW); // Показати вікно
m_pMainWnd->UpdateWindow(); // Поновлювати вікно
return TRUE; // Повернути повідомлення про нормальне завершення
};
CMyApp theApp; // завантаження додатку на виконання
Тепер проаналізуємо написане:
Перший рядок містить потрібний файл заголовку з описом класів, функцій та змінних, він посилається ще на велику кількість інших, а вони на інші і так до windows.h. Саме тому windows.h не приєднувався. У кожній програмі на С++ є головна функція програми, в Dos це main(), у Windows - WinMain(). Ця функція забезпечує завантаження програми. Вона перевіряє операційне середовище, виконує деякі налаштування і, якщо все нормально, безпосередньо передає керування програмному коду користувача. У наведеному тексті програми цієї функції немає, тому що у MFC є клас CWinApp, який і містить головну функцію програми. Природно, що у додатку вона може бути лише одна.
При оголошенні класів вказано про створення класу CMyApp, похідного від CWinApp, який успадковує всі властивості, методи та ін. вищого по ієрархії класу. У оголошеному нами класі оголошений конструктор по замовчуванню (без параметрів). Він потрібний, інакше не можна компілювати програму. Тут все логічно, у коді оголошується статичний клас, похідний від оголошеного CMyApp у рядку CMyApp theApp;. Видно, що він також без параметрів.
CWinApp має віртуальний метод InitInstance(). Віртуальний він тому, що це лише заглушка. Ми написали власний метод у вигляді функції. Цей метод повертатиме ненульове значення, коли ініціювання пройшло нормально, а інакше 0. Він призначений для того, щоб можна було оголосити клас вікна програми і відобразити вікно на екрані.
Далі потрібно знати, що у CWinApp є вказівник на клас вікна - m_pMainWnd. Цей вказівник загальнодоступний і можна здогадатися, оскільки він ніде не оголошений. Ситуація з ним така - Якщо після закінчення InitInstance() він дорівнює нулю, тоді додаток завершиться. І, природно,, коли додаток завершується - він обнуляється. Рядком m_pMainWnd=new CMainWnd(); цьому вказівнику надається адреса класу CMainWnd, який породжений відт CFrameWnd. Останній з них відповідає за роботу вікна програми у стилі одного документу (SDI - single document interface). Від створує вікно, керує повідомленнями та ін. У конструкторі цього класу викликається функція створення вікна, у якій вказана велика кількість параметрів.
Перший параметр вказує на клас Windows, він нам поки що не потрібен, і тому NULL, далі вказане ім’я вікна програми, WS_OVERLAPPEDWINDOW вказує, що вікно має заголовок і рамку, rectDefault повідомляє про те, що розмір вікна надасть Windows, і ще деякі параметри, які розглянемо пізніше. Далі записана ASSERT(m_pMainWnd);. Дуже корисна та проста функція. Якщо створення об’єкту відбудеться, тоді m_pMainWnd буде відрізнятися від нуля і все буде нормально, а інакше одержимо повідомлення про те, що у такому то файлі на такому то рядку є помилка. Це набагато краще, ніж дивитися дизассембльований код чи опинитися у початковому коді бібліотеки MFC, якщо взагалі не «підвісимо» Windows.
Оскільки m_pMaiWnd це зараз те ж саме, що й CMainWnd, тому ми скористаємось цією змінною для того, щоб вивести на екран вікно:
m_pMainWnd->ShowWindow(SW_SHOW);
Та показати вікно.
m_pMainWnd->UpdateWindow();
Проект, що містить єдиний файл з програмним кодом, готовий. Компілюємо та завантажуємо на виконання додаток і отримаємо таке вікно (Рис.1а.7):
Рис.1а.7. Результат виконання програми project1.
Алгоритм програми
Приєднати оголошення класів MFC: #include <afxwin.h>
Оголосити клас, похідний від CWinApp: class CMyApp : public CWinApp
Оголосити змінну цього класу: CMyApp theApp;
Оголосити клас, похідний від CFrameWnd: class CMainWnd : public CFrameWnd
У конструкторі класу, похідного від CFrameWnd, викликати функцію Create() та вибрати параметри у ній за власним смаком:
Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);
Перевизначити функцію InitInstance() класу, похідного від CWinApp.
У функції InitInstance() створити об’єкт, похідний від CFrameWnd і надати вказівнику m_pMainWnd адресу цього объекту: m_pMainWnd=new CMainWnd();
Перевірити вказівник на коректність: ASSERT(m_pMainWnd);
Викликати функції класу, похідного від CFrameWnd для креслення на екрані:
m_pMainWnd->ShowWindow(SW_SHOW);// Показати вікно
m_pMainWnd->UpdateWindow(); // Поновити вікно
Закінчити виконання функції, повідомивши MFC, що все нормально: return TRUE;
Відкомпілювати, зібрати та завантажити програму, після чого побачити на екрані порожнє вікно з іменем Step1.
Побудоване вікно має лише системне меню, яке дає змогу згорнути, розгорнути та зачинити вікно, а також пересунути та змінити його розміри.