Практична робота №11. з предмету «Системне програмування засобами АРІ»
Про матеріал
Практична робота №11. з предмету «Системне програмування засобами АРІ» Програма дослідження функції PlgBlt.Практична робота №11.
з предмету «Системне програмування засобами АРІ»
Тема: Програма дослідження функції PlgBlt.
Мета: Засвоєння методики написання програм засобами АРІ що використовують функцію PlgBlt.
Короткі теоретичні відомості.
Функція PlgBlt (), здійснює перенесення точок з прямокутника-джерела в заданий паралелограм-приймач:
BOOL WINAPI PlgBlt (HDC hdc Dest, CONST POINT * lpPoint, HDC hdc Src, int nXSrc, int nYSrc, int nWidth, int nHeight, HBITMAP hbmMask, int xMask, int yMask);
Де:
- hdcDest - дескриптор контексту пристрою приймача;
- lpPoint - вказівник на масив з трьох кутів паралелограма;
- hdcSrc - дескриптор вихідного пристрою-джерела;
- nXSrc, nYSrc - x-, y-координати лівого верхнього кута вихідного прямокутника;
- nWidth, nHeight - ширина і висота вихідного прямокутника;
- hbmMask - дескриптор монохромного бітового образу-маски;
- xMask, yMask - x, y-координати лівого верхнього кута маски.
Щоб уявити роботу нової функції, напишемо програму, яка виводить у вікно зображення "як є" і надає можливість змінювати координати паралелограма-приймача. Для наочності будемо змінювати координати трьох його кутів, "буксируючи" їх мишею в потрібну позицію (очевидно, що для однозначного завдання паралелограма досить задати лише три його кута).
Кути прямокутника, що задаються в масиві lpPoint, для наочності виділили великими гуртками.
Для створення програми необхідно проект Win32 та створити стандартну Windows заготовку.
Потім необхідно модифікувати головне меню програми, залишивши тільки пункт «Вихід», після чого необхідно прописати для цього пункту ідентифікатор (ИД) : IDM_EXIT.
Після чого необхідно завантажити малюнок, для цього необхідно у вікні ресурсів вибрати спливаюче меню на проектові та вибрати підпункт добавити та ресурс:
У вікні вибору ресурсів, необхідно вибрати Bitmap та натиснути клавішу «Импорт»:
Після вибору зображення необхідно встановити для нього ідентифікатор (ИД): IDB_BITMAP1.
Потім, вміст віконної функції необхідно замінити наступним лістингом програм:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
RECT rt;
int i, x, y, p, q;
static int k;
static bool Capture;
static POINT pts[3];
static HDC memDC;
static HBITMAP hPicture;
static BITMAP bm;
static HPEN hPen;
switch (message)
{
case WM_CREATE:
hPicture = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
GetObject(hPicture, sizeof(bm), &bm);
hPen = CreatePen(PS_SOLID, 4, RGB(0, 0, 255));
GetClientRect(hWnd, &rt);
x = (rt.right - bm.bmWidth) / 2;
y = (rt.bottom - bm.bmHeight) / 2;
pts[0].x = pts[2].x = x;
pts[0].y = pts[1].y = y;
pts[1].x = x + bm.bmWidth;
pts[2].y = y + bm.bmHeight;
hdc = GetDC(hWnd);
memDC = CreateCompatibleDC(hdc);
SelectObject(memDC, hPicture);
ReleaseDC(hWnd, hdc);
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDM_EXIT: DestroyWindow(hWnd); break;
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_LBUTTONDOWN:
x = LOWORD(lParam);
y = HIWORD(lParam);
for (k = 0; k < 3; k++)
{
p = x - pts[k].x;
q = y - pts[k].y;
if (p*p + q*q < 16)
{
SetCapture(hWnd);
Capture = true;
return 0;
}
}
break;
case WM_MOUSEMOVE:
if (Capture)
{
pts[k].x = LOWORD(lParam);
pts[k].y = HIWORD(lParam);
InvalidateRect(hWnd, NULL, TRUE);
}
break;
case WM_LBUTTONUP:
if (Capture)
{
ReleaseCapture();
Capture = false;
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
PlgBlt(hdc, pts, memDC, 0, 0, bm.bmWidth, bm.bmHeight, 0, 0, 0);
SelectObject(hdc, (HPEN)hPen);
for (i = 0; i < 3; i++)
Ellipse(hdc, pts[i].x - 4, pts[i].y - 4, pts[i].x + 4, pts[i].y + 4);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteDC(memDC);
DeleteObject(hPen);
PostQuitMessage(0);
break;
default: return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Завдання.
1. Написати програму на мові С++ засобами АРІ яка використовує функцію PlgBlt.
Програма повинна мати власний оригінальний малюнок.
Заголовок програми повинен містити Ваше прізвище ім’я та по батькові а також Вашу групу.
2. Оформити звіт по лабораторній роботі.
3. Захистити звіт.