Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗвЫт_ЛР_C++.doc
Скачиваний:
1
Добавлен:
05.05.2019
Размер:
513.02 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ МОЛОДІ ТА СПОРТУ

Черкаський державний технологічний університет

Кафедра програмного забезпечення автоматизованих систем

ЗВІТ

з лабораторних робіт 

з дисципліни «Системне програмування засобами API»

Виконав:

студент групи ЗПЗС-114

Коренюк М.О.

Перевірив:

викладач Михайленко Н.С.

Черкаси 2012р.

Лабораторна робота №1

Тема: Створення проекту в середовищі Visual C++ засобами API.

Мета: Створення найпростішого вікна засобами API.

Теоретичні відомості:

Найпростіше компілювати API программы в Visual C++ (частина великого пакету програм Visual Studio компанії Microsoft. Крок 1 Запуск програми

Запустити програму Visual C++ через меню пуск. На екрані з’явиться порожнє вікно програми. Вікно має панель управління для зручного редагування текстів, а також меню.

Крок 2 Створення проекту

 

При створенні нового проекту, слід його налаштувати.

Вибрати пункти меню File->New->Project. З’явиться вікно New.

Крок 3 Визначення змісту

У вікні New вибрати тип "Win 32 Application". Win 32 Application - це і є програма на API. Слід дати ім’я проекту - не файлу, і не програмі, а саме проекту. Наприклад, First. В полі Location буде вказаний шлях до папки проекту First, в ній буде розміщений весь проект. Натиснути Ok.

В наступному вікні, визначаеться вміст проекту. В Visual C++ слід встановити прапорець на An Empty Project (“Порожній проект”) і натиснути кнопку Finish ("Завершити").

Крок 4 Порожній проект

З’явиться готовий проект, в якому нічого немає. Є проект, але немає програми. Залишається ввести текст програми і додати його в проект. Такий вигляд має порожній проект:

В нижній частині програми вікно коментарів компілятора. В ньому буде вестись журнал компіляції, компоновки і побудови, відображатися статус проекту, видаватись попередження (warnings), помилки (errors) і коменатрі.

В лівій частині вікно навігатора, що має три вкладки: Files (Файлы), ClassView (Вид класів) і Resource (Ресурси). Вкладка FileView - файли, які входять в проект. Вони умовно розділені на три папки: Source (початкові), Headers (Библиотеки, заголовочні файли), Resources (ресурси - картинки, іконки, курсори). ClassView - діаграмма класів, що використовуються в програмі. Оскільки мова API процедурна, нам вона поки що не потрібна. ResourceView - має наші ресурси. Вони описані в файлі ресурсів. В ньому описані усі ресурси додатку – вікна діалогу, панелі інстрментів, меню, картинки, іконки, курсори, тощо. Звичайно файл ресурсів має розширення: *.RC

Крок 5 Додавання нового файлу

Методика включення файлу програми в Visual C++ 6.0.

Вибрати File->New. У вікні вказати тип файлу, що створюється - С++ Source File - початковий текст мовою С++. Ввести його ім’я в полі Name. Воно також First, як і ім’я проекту. Розширення срр додається автоматично. Натиснути ОК. На екрані зявився відкритий файл First.cpp, до якого вже можна вводити початковий текст. Його слід додати до проекту. Пункт меню Project->Add to Project->New. У вікні вказати наш файл.

Все готово для введення програми. Якщо вибрати в навігаторі вкладку Files і розкрити папку Source, то в ній можна побачити перший файл First.cpp!

Крок 6 Введення початкового тексту програми

Тепер в файл можна ввести певний текст. Перша програма буде такою:

Листинг №1 "Первая программа"

#include<windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{MessageBox(0, "Привет, Win32 API", "Первое окно...", MB_ICONINFORMATION|MB_OK);

}

Ввести цей текст в файл First.cpp і зберегти його. Запустити програму на виконання можно кнопкою F5. Буде запит, чи хочете ви побудувати виконуваний файл. Відповісти Yes, і через певний час, якщо все вірно набрано, побачите свою програму. Після запуску build в папці проекту з’явиться вкладена папка Debug, до якої і буде вміщений створений нами файл First.exe.

Ця програма не має головного вікна, яке в більшості вважається обов’язковим елементом для всіх Windows-програм, якщо вони не консольні, однак це вже повноцінна програма для Windows, про що свідчить підключення бібліотеки windows.h. Далі іде тіло функції WinMain().

WinMain() - головна функція будь-якої API программы - точка входу в неї. Подібною є функція main() в DOS.

Програма виводить на екран інформаційне вікно, з яким ви зустрічалися, коли працювали в Windows в якості користувача.

Звичайна процедурна мова Сі++. Єдине, що важливо розглянути - це функція виведення вікна інформаційного повідомлення. Звичайно такі повідомлення бувають чотирьох типів:

  • інформаційні (літера i на синьому тлі),

  • питальні (знак питання),

  • попереджувальні (знак оклику),

  • повідомлення про помилку (знак "Стоп").

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

Первший аргумент - ідентификатор батьківського вікна. Ми не маємо головного вікна програми в принципі, тому він дорівнює 0.

Другий аргумент – текстовий рядок, який буде виведений безпосередньо у вікні.

Третій - заголовок цього вікна.

Щоб змінити стиль вікна, слід змінити четвертий аргумент. Він визначає тип вікна в залежності від типу повідомлень:

  • інформаційних (MB_ICONINFORMATION)

  • питальних (MB_ICONQUESTION)

  • повідомлень про помилку (MB_ICONSTOP)

  • попереджувальних (MB_ICONEXCLAMATION)

Число кнопок також може змінюватись:

  • лише кнопка "ОК" (MB_OK)

  • "Скасувати" (MB_CANCEL)

  • "Пропустити" (MB_IGNORE)

  • "ОК і Скасувати " (MB_OKCANCEL)

Вікно, створене MessageBox - стандартне вікно Windows. Також до стандартних вікон відносяться такі відомі діалоги, як: вікно вибору папки, вікно відкриття і збереження файлів, вікно вибору кольору, шрифту і вікно налаштування принтера. Вони нам дуже допомагають, але ніколи не замінять головного вікна програми, яке ми будемо створювати самостійно.

Лістинг программи:

#include<windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

MessageBox(0, "Вы действительно хотите удалить файл?", "Удаление...", MB_ICONQUESTION|MB_OKCANCEL);

}

Висновок:

В даній лабораторній роботі було створено найпростіше вікно засобами API.

Лабораторна робота №2

Тема: Створення головного вікна. Вивчення функцій LoadIcon та LoadCursor. Створення іконки та курсору користувача.

Мета: Навчитись створювати іконки та курсори користувача засобами API.

Теоретичні відомості:

Елементи вікна з практичної роботи №1 можна змінити. Кожний компілятор: Delphi, Builder, Visual C++ має свої іконки. По них можна здогадатися, де саме був створений додаток. Visual C++ має вбудований засіб створення та редагування іконок. Крім того, можна просто скопіювати в папку з проектом файл з розширенням *.ico. Це і буде ваша іконка.

Іконки, курсори, картинки - це ресурси додатоку. Посилання на них знаходяться в файлі з розширенням *.rc. Це некомпільований файл ресурсів, в якому буде описано все, що не входить до стандартного вікна.

В файлі ресурсів звичайно вміщуються докладні описи вікон діалогу, элементів керування, меню, тощо. Поки що ресурсів немає. Слід їх створити.

Вибрати пункт Project->Add Resource або Ctrl+R. З’явиться вікно додавання ресурсу.

Через нього можна додавати картинки, курсори, вікна діалогу, меню, панелі керування, тощо. Вибрати рядок Icon і натиснути кнопку New, якщо буде створена нова іконка, або кнопку Import, якщо використовується готовий файл. Відкриється редактор, а в папці Resourse Files з’явиться файл з розширенням *.rc і файл іконки. Компілятор дав їй ім’я IDI_ICON1. IDI – префікс імен іконок.

Слід повідомити компілятору про створену іконку. Оголосити ідентифікатор szIconName, який буде мати ім’я іконки в редакторі ресурсів (IDI_MYICON). Змінну szIconName краще оголосити під оголошенням імені програми, на початку:

char szProgName[]="Имя программы"; //цей рядок був

char szIconName[]="IDI_MYICON"; //доданий рядок

При заповненні структури WNDCLASS, було вказано що іконок немає, w.hIcon=0. Цей рядок слід змінити так:

w.hIcon=LoadIcon(hInstance, szIconName);

hInstance - ідентифікатор поточного додатку.

Тепер файл ресурсів у будь-якому текстовому редакторі крім будь-яких директив препроцессора повинен мати такі рядки:

//lab2.rc

#include "windows.h"

IDI_MYICON ICON "lab2.ico"

Файли *.rc мають свою мову. В цьому рядку визначається ідентифікатор IDI_MYICON, потім вказано, що це іконка ICON, а далі - її ім’я в тій самій папці.

Виберіть команду Build->Rebuild All або Build->Build Solution.

Тепер ваша програма буде носити створену вами іконку.

Попередження! Якщо компілятор не хоче включати нову іконку, то найкращий рецепт - створити файл ресурсів вручну.

Крім іконок користувача, можна вивести стандартні іконки, якщо вікно відповідає їх призначенню:

IDI_APPLICATION - іконка додатку за замовчуванням

IDI_ASTERISK - символ i (информаційні додатки)

IDI_EXCLAMATION – знак оклику (попередження)

IDI_HAND - знак STOP (помилка)

IDI_QUESTION – знак питання

IDI_WINLOGO (NULL) - прапорець

w.hIcon=LoadIcon(hInstance, IDI_APPLICATION);

Заміна поточного курсору на свій курсор

Знову вибрати пункт меню Projects->Add Resource, тепер вибрати Cursor. Клацнути кнопку New, якщо малюємо "з нуля" або Import, якщо додаємо файл, що існує *.cur.

Тепер, в Solution Explorer або на вкладці Resource Files буде доданий ідентифікатор IDC_CURSOR1. Його ім’я можна змінити у вікні Properties на IDC_MYCURSOR.

Слід оголосити змінну, що матиме ім’я курсору:

char szProgName[]="і’мя программы"; //рядок імені програми

char szIconName[]="IDI_MYICON"; //рядок додавання іконки

char szCursorName[]="IDC_MYCURSOR" //доданий рядок курсору

І в оголошенні структури WNDCLASS теж слід змінити рядок:

w.hCursor=LoadCursor(hInstance, szCursorName); //тепер підключений курсор користувача.

Лістинг файлу amain.cpp:

#include<windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

char szProgName[]="Ім’я программы";

char szIconName[]="IDI_MYICON"; //тут додана іконка

char szCursorName[]="IDC_MYCURSOR"; // тут доданий курсор

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)

{

HWND hWnd;

MSG lpMsg;

WNDCLASS w; //створення екземпляру структури WNDCLASS

//її заповнення

w.lpszClassName=szProgName; //ім’я програми - оголошено вище

w.hInstance=hInstance; //ідентифікатор поточного додатку

w.lpfnWndProc=WndProc; //вказівник на функцію вікна

w.hCursor=LoadCursor(hInstance, szCursorName); //завантаження курсору

w.hIcon=LoadIcon(hInstance, szIconName); // завантаження іконки

w.lpszMenuName=0; // меню поки немає

w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //колір фону вікна

w.style=CS_HREDRAW|CS_VREDRAW; //стиль - перемалювання по х і по у

w.cbClsExtra=0;

w.cbWndExtra=0;

if(!RegisterClass(&w))

return 0;

hWnd=CreateWindow(szProgName, //імя програми

"Міняємо іконку і курсор!", //Заголовок окна

WS_OVERLAPPEDWINDOW, //Стиль вікна - перекриває

100, //положення вікна на екрані по х

100, // положення по у

500, //ширина

400, //висота

(HWND)NULL, //ідентифікатор батьківського вікна

(HMENU)NULL, // ідентифікатор меню

(HINSTANCE)hInstance, // ідентифікатор екземпляру програми

(HINSTANCE)NULL); //відсутність додаткових параметрів

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

while(GetMessage(&lpMsg, NULL, 0, 0)) { //отримання повідомлення з черги

TranslateMessage(&lpMsg); //перетворення повідомлень клавіш у символиы

DispatchMessage(&lpMsg); //Передає повідомлення відповідній функції вікна

}

return(lpMsg.wParam);

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT messg,

WPARAM wParam, LPARAM lParam)

{

HDC hdc; //створюємо контекст пристрою

PAINTSTRUCT ps; // створюємо екземпляр структури графічного виведення

//Цикл обробки повідомлень

switch(messg)

{

// повідомлень малювання

case WM_PAINT :

//початок малювання

hdc=BeginPaint(hWnd, &ps);

// вставлка тексту:

TextOut(hdc, 150,150, " ЛАБОРАТОРНА РОБОТА №2", 21);

//оновлення вікна

ValidateRect(hWnd, NULL);

//завершення малювання

EndPaint(hWnd, &ps);

break;

//повідомлення виходу - руйнування вікна

case WM_DESTROY:

PostQuitMessage(0); //надсилання повідомлення виходу з кодом 0 - нормальне завершення

break;

default:

return(DefWindowProc(hWnd, messg, wParam, lParam)); //звільнення черги додатку від нерозпізнаних повідомлень

}

return 0;

}

Лістинг файлу recc.rc:

#include "windows.h"

IDI_MYICON ICON "icon1.ico"

IDC_MYCURSOR CURSOR "cursor1.cur"

Вікно результату:

Висновок:

В даній лабораторній роботі були створені іконки та курсори користувача засобами API.

Лабораторна робота №3

Тема: Виведення тексту вікна. Вивчення функції TextOut. Завдання параметрів шрифту.

Мета: Навчитись керувати параметрами шрифту засобами API.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]