Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
API_LAB.doc
Скачиваний:
1
Добавлен:
06.05.2019
Размер:
485.38 Кб
Скачать

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

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

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

ЗВІТ

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

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

Виконав:

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

Вариницький С.В.

Перевірив:

ст.викладач

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

Черкаси 2012р

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

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

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

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

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

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

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

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

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

- інформаційних (MB_ICONINFORMATION, MB_ICONASTERISK )

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

- повідомлень про помилку (MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND )

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

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

- "ОК" (MB_OK)

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

- "Повтор" і " Скасувати" (MB_RETRYCANCEL )

- "Перервати", "Повтор", "Пропустити" (MB_ABORTRETRYIGNORE )

- "Так" і "Ні" (MB_YESNO )

- "Так", "Ні", "Скасувати" (MB_YESNOCANCEL )

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

#include<windows.h>

#include <tchar.h>

//#include<atlbase.h>

//#include<atlwin.h>

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

MessageBox( NULL,

_T("Зєднання встановлено."),

_T("ЗПЗС-114 Лаб№1 Вариницький С.В."),

MB_ICONINFORMATION|MB_OK);

MessageBox( NULL,

_T("Ви дійсно хочете видалити файл?"),

_T("ЗПЗС-114 Лаб№1 Вариницький С.В."),

MB_ICONQUESTION|MB_YESNO);

MessageBox( NULL,

_T("Не вдалось скопіювати файл lib.dll в папку c:\\tmp "),

_T("ЗПЗС-114 Лаб№1 Вариницький С.В."),

MB_ICONEXCLAMATION|MB_ABORTRETRYIGNORE );

MessageBox( NULL,

_T("З'єднання розірвано! Спробувати з'єднатися знову?"),

_T("ЗПЗС-114 Лаб№1 Вариницький С.В."),

MB_ICONSTOP|MB_RETRYCANCEL );

return 0;

}

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

Висновки: Я навчився створювати найпростіші вікна засобами API.

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

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

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

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

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

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

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

w.hIcon=LoadIcon(hInstance, szIconName);

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

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

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

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

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

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

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

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

w.hIcon=LoadIcon(hInstance, IDI_APPLICATION);

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

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

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

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

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

Якщо компілятор не розуміє, можна написати код RC-файлу вручну, наприклад, так:

//lab2.rc

#include "windows.h"

IDI_MYICON ICON "lab2.ico"

IDC_MYCURSOR CURSOR "lab2.cur"

Крім курсору користувача, можна змінити стандартну стрілку на інший стандартний курсор:

IDC_CROSS - хрестик

IDC_HELP - курсор зі знаком питання

IDC_ARROW - звичайна стрілка

IDC_IBEAM - текстовый курсор I

IDC_NO – перекреслене коло

IDC_SIZEALL - чотиристороня стрілка

IDC_SIZENESW - двостороння діагональна стрілка (північ-схід і південь-захід)

IDC_SIZENS - двостороння діагональна стрілка (на північ і на південь)

IDC_SIZENWSE - двостороння діагональна стрілка (північ-захід і південь-схід)

IDC_SIZEWE (на захід і на схід)

IDC_UPARROW - вертикальна стрілка

IDC_WAIT - пісочний годинник

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

//lab2.cpp

#include<windows.h>

#include<tchar.h>

const wchar_t szTitle[]=_T("ЗПЗС-114 Лаб№2 Вариницький С.В.");

const wchar_t szText[]=_T("Міняємо іконку і курсор!");

const wchar_t szProgName[]=_T("Лаб№2");

const wchar_t szIconName[]=_T("IDI_MYICON");

const wchar_t szCursorName[]=_T("IDC_MYCURSOR");

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

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

{

HWND hWnd; MSG lpMsg;

WNDCLASS w;

w.style = CS_HREDRAW|CS_VREDRAW;

w.lpfnWndProc = WndProc;

w.cbClsExtra = 0;

w.cbWndExtra = 0;

w.hInstance = hInstance;

w.hIcon = LoadIcon(hInstance, szIconName);

//w.hCursor = LoadCursor(NULL, IDC_ARROW); //загружаем курсор

w.hCursor = LoadCursor(hInstance, szCursorName);

w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);

w.lpszMenuName = 0;

w.lpszClassName = szProgName;

if(!RegisterClass(&w)) {

MessageBox(NULL, _T("Can't register class"), _T("Error"), MB_OK); return 0;

}

hWnd = CreateWindow(szProgName, szTitle, WS_OVERLAPPEDWINDOW,100, 100, 300, 200, (HWND)NULL, (HMENU)NULL,(HINSTANCE)hInstance, (LPVOID) NULL);

if(!hWnd) {

MessageBox(NULL, _T("Can't create window"), _T("Error"), MB_OK); return 0;

}

ShowWindow(hWnd, nCmdShow);

UpdateWindow(hWnd);

while(GetMessage(&lpMsg, hWnd, 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, 60,75, szText, 24);

ValidateRect(hWnd, NULL);

EndPaint(hWnd, &ps);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, messg, wParam, lParam);

}

return 0;

}

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

#include "windows.h"

IDI_MYICON ICON "icon1.ico"

IDC_MYCURSOR CURSOR "cursor1.cur"

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

Висновок:

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

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

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

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