Поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування

Лабораторна робота №12: “Windows-застосування та графічні примітиви

 

Мета заняття:

– поглибити і закріпити знання з архітектури МП платформи х86 і навички його програмування;

– придбати практичні навички у побудові базового застосування під Win32 з дослідженням параметрів віконних процедур.

Постановка задачі

Методичні рекомендації

В лабораторній роботі необхідно виконати 2 завдання.

У випадку, якщо треба взяти ресурс піктограми з іншого ехе-файлу, то можна скористатися, наприклад, програмою PE Resource Explorer (wasm.ru).

 

Завдання 1

– піктограма застосування за умовчанням; – курсор у вигляді стандартної стрілки та малого пісочного годинника; – вікно має заголовок і рамку з обрамленням;

Завдання 2

1. Відобразити вписані один в одний трикутник та прямокутник. 2. Відобразити вписані один в одний закруглений прямокутник та трикутник. 3. Відобразити вписані один в одний еліпс та закруглений прямокутник.

MACRO b0,b1,b2,b3

B0

B1

B2

B3

ENDM

.data ; директива визначення даних

poln POINT <270,55>, <170,280>, <370,280>

mytext db "Рысованый А.Н., e-mail: rysov@rambler.ru",0

ClassName db "SimpleWinClass",0

AppName db "Графические примитивы",0

MenuName db "FirstMenu",0

Help_string db " Все просто :)",0

color1 RGBQUAD <255,0,0>

color2 RGBQUAD <80,10,255>

color3 RGBQUAD <0,110,255>

hPen1 dd 0 ; дескриптор створюваного пера

hOldPen dd 0 ; дескриптор початкового пера

.data? ; директива невизначених даних

hInstance HINSTANCE ?

CommandLine LPSTR ?

blueBrush dd ? ; комірка для параметрів кисті

.const

IDM_FUNC equ 1

IDM_EXIT equ 2

IDM_AUTOR equ 3

IDM_HELP equ 4

IDM_CLEAN equ 5

IDI_ICON equ 22

.code ; директива початку сегмента команд

start: ; мітка початку програми з ім’ям start

invoke GetModuleHandle, NULL ; отримання дескриптора програми

mov hInstance,eax ; збереження дескриптора програми

invoke GetCommandLine

mov CommandLine,eax

Invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

Invoke ExitProcess,eax

CmdShow:DWORD LOCAL wc:WNDCLASSEX ; резервування стека під структуру LOCAL msg:MSG ; резервування стека під структуру MSG

IF uMsg==WM_DESTROY

.ELSEIF uMsg==WM_CREATE ; обробка повідомлення WM_CREATE invoke CreatePen, ; створення пера PS_SOLID,10, ; завтовшки 10 пікселів

ELSEIF ax==IDM_CLEAN ; очистити

invoke InvalidateRect, hWnd, NULL, TRUE ; виклик функції та WM_PAINT

. ELSEIF ax==IDM_HELP; якщо є повідомлення "Help"

invoke MessageBox,NULL,ADDR Help_string,OFFSET AppName,MB_OK

ELSE

invoke DestroyWindow,hWnd ; знищення вікна

.ENDIF ; закінчення логічної структури

Else

invoke DefWindowProc,hWnd,uMsg,wParam,IParam ; обробка та відправка повідомлення до функції WndProc

ret ; повернення з процедури

.endif ; закінчення логічної структури

xor eax,eax

ret ; повернення з процедури

WndProc endp ; закінчення процедури WndProc

end start ; закінчення програми з ім’ям start

 

Приклад.

Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.