МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ МОЛОДІ ТА СПОРТУ
Черкаський державний технологічний університет
Кафедра програмного забезпечення автоматизованих систем
ЗВІТ
з лабораторних робіт
з дисципліни «Системне програмування засобами 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.