|
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,\
CmdShow:DWORD
LOCAL wc:WNDCLASSEX; резервування стека під структуру
LOCAL msg:MSG; резервування стека під структуру MSG
LOCAL hwnd:HWND; резервування стека під хендл програми
@<mov wc.cbSize,SIZEOF WNDCLASSEX>,<mov wc.cbClsExtra,0>
@<mov wc.style,CS_HREDRAW or CS_VREDRAW >,<mov wc.cbWndExtra,0>
@<mov wc.lpfnWndProc,OFFSET WndProc>,<push hInst>,<pop wc.hInstance >
@<mov wc.hbrBackground,COLOR_WINDOW+1>,<mov wc.lpszMenuName,OFFSET MenuName>
mov wc.lpszClassName,OFFSET ClassName; ім’я класу
invoke LoadIcon,hInstance, IDI_ICON; ресурс піктограми
@< mov wc.hIcon,eax >,< mov wc.hIconSm,eax >
invoke LoadCursor,NULL,IDC_ARROW; ресурс курсору
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc; регістрація класу вікна
invoke CreateWindowEx, \; функція створення вікна за зразком
0,ADDR ClassName, ADDR AppName, \; стиль та адреса імен класу та вікна
WS_OVERLAPPEDWINDOW, \; базовий стиль
CW_USEDEFAULT,CW_USEDEFAULT,\; гориз. та верт. координати вікна
550,400, \; ширина та висота вікна
0,0, hInst,0; дескриптори батьківського вікна, меню, програми
mov hwnd,eax
INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
INVOKE UpdateWindow, hwnd
.WHILE TRUE
INVOKE GetMessage, ADDR msg,NULL,0,0; читання повідомлення
.BREAK.IF (!eax)
INVOKE DispatchMessage, ADDR msg; відправка на обслуговування
.ENDW
mov eax,msg.wParam
ret; повернення з процедури WinMain
WinMain endp; закінчення процедури з ім’ям WinMain
WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,IParam:LPARAM
LOCAL hdc:HDC; резервування стеку під хендл вікна
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_CREATE; обробка повідомлення WM_CREATE
invoke CreatePen,\; створення пера
PS_SOLID,10,\; завтовшки 10 пікселів
dword ptr color1;
mov hPen1,eax; збереження отриманого дескриптора пера
.ELSEIF uMsg==WM_COMMAND; якщо є повідомлення від меню
mov eax,wParam
.IF ax==IDM_FUNC; якщо є повідомлення про відображення фігур
invoke GetDC, hWnd; отримати дескриптор контексту пристрою
mov hdc, eax; збереження
invoke SelectObject,\; вибирається в контекст
hdc,hPen1; нове перо
invoke CreateHatchBrush, \; створення кісті для замалювання фігури
HS_HORIZONTAL,\; стиль – горизонтальна штриховка
dword ptr color1; значення кольору
mov blueBrush,eax; збереження параметрів кісті
invoke SelectObject,\; вибір об’єкта з параметрами
hdc,\; контекст пристрою
blueBrush; параметри кісті
invoke RoundRect,\
hdc,\; дескриптор контексту пристрою
40,40,\; х-, у-координата верх. лівого кута
500,300,\;х-, у-коорд. нижн. прав кута
40,40;ширина та висота еліпса для рисування кута
invoke CreateHatchBrush, \; створення кісті для зарисування фігури
HS_DIAGCROSS,\; стиль – штриховка під 45 зліва та справа
dword ptr color2; значення кольору
mov blueBrush,eax; збереження параметрів кісті
invoke SelectObject,\; вибір об’єкта з параметрами
hdc,\; контекст пристрою
blueBrush; параметри кісті
invoke Polygon,\
hdc,; дескриптор контексту пристрою
addr poln,; адреса масиву координат точок
3; кількість вершин в масиві
invoke ReleaseDC, hWnd, hdc; визволення контексту пристрою
.ELSEIF ax==IDM_AUTOR; якщо є повідомлення "Autor"
invoke GetDC, hWnd; отримання дескриптора контексту пристрою
mov hdc, eax; збереження
invoke SelectObject, hdc,hPen1; отримання в контекст нового пера
invoke SetTextColor,hdc, dword ptr color3; встановлення кольору тексту
invoke TextOut,hdc, 170,10,\; x-, y-коодината стартової позиції
addr mytext, 40; адреса рядка та число символів в рядку
.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
Дата добавления: 2014-12-18; просмотров: 111 | Поможем написать вашу работу | Нарушение авторских прав |