Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Флаг переключения режимов
toggle DD О
.code
start:
push NULL
call GetModuleHandle
mov hlnstance, EAX
call GetCommandLine
mov CommandLine, EAX
push SW_SHOWDEFAULT
push CommandLine
push NULL
push hlnstance
call WinMain
push EAX
call ExitProcess
WinMain proc hlnst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD

Локальные переменные процедуры
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG

Заполнение структуры WNDCLASSEX требуемыми параметрами
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
push hlnst
pop wc.hlnstance
mov wc.hbrBackground, COLOR J3TNFACE+5
mov wc.IpszMenuName, NULL
mov wc.IpszClassName, offset szClassName
invoke Loadlcon, NULL, IDI_APPLICATION
mov wc.hlcon, EAX
invoke LoadCursor, NULL, IDC_ARROW
mov wc.hCursor, EAX
mov wc. hlconSm, 0
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx, WS_EX_OVERLAPPEDWINDOW,ADDR szClassName,\
ADDR szDisplayName, WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT, CWJJSEDEFAULT, CWJJSEDEFAULT, \
CWJJSEDEFAULT, NULL, NULL, hlnst, NULL
mov hWnd, EAX
invoke ShowWindow, hWnd, SW_SHOWNORMAL
invoke Updatewindow, hWnd

Цикл обработки сообщений
StartLoop:
push 0
push 0
push NULL
lea EAX, msg
push EAX
call GetMessage
cmp EAX, 0
je ExitLoop
lea EAX, msg
push EAX
call TranslateMessage
lea EAX, msg
push EAX
call DispatchMessage
jmp StartLoop ExitLoop
mov EAX, msg.wParam
ret
WinMain endp
Оконная процедура
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
LOCAL hdc
LOCAL ps
LOCAL rect
LOCAL point
HDC
PAINTSTRUCT
RECT
POINT
cmp uMsg, WM_PAINT
j ne next_l
invoke BeginPaint, hWnd, ADDR ps
mov hdc, EAX
lea EDX, ps
push EDX
push hWnd
call EndPaint
ret
next_l:
cmp uMsg, WM_MOUSEMOVE
jne next_2
cmp toggle, 0 ;если отпущена левая кнопка мыши, рисовать нельзя
j е ex_wmmov
invoke GetDC, hWin
mov hdc, EAX
invoke GetciientRect, hWin, ADDR rect

Сохранение текущих координат мыши
mov ЕАХ, lParam
mov cur_x, EAX
and cur_x, OFFFFh
shr EAX, 16
mov cur_y, EAX invoke MoveToEx, hdc, prev_x, prev_y, 0
invoke LineTo, hdc, cur_x, cur_y
invoke ReleaseDC, hWin, hdc
ex_wmmov:
ret
next_2:
cmp uMsg, WM_RBUTTONDOWN
jne next_3

Очистка клиентской области приложения
invoke GetDC, hWin
mov hdc, EAX
invoke GetciientRect, hWin, ADDR rect
invoke InvalidateRect, hWin, ADDR rect, TRUE
invoke ReleaseDC, hWin, hdc

Установка начальных координат рисования
mov р геv_x, 100
mov prev_y, 100
ret
next_3:
cmp uMsg, WM_LBUTTONDOWN
jne next_4

Левая кнопка нажата, можно рисовать
mov toggle, 1

Сместим начальную точку рисования относительно предыдущей
add prev_x, 100
add prev_y, 10
ret
next_4:
cmp uMsg, WM_LBUTTONUP
j ne next_5

Левая кнопка отпущена, рисовать нельзя
mov toggle, 0
ret
next_5:
cmp uMsg, WM_DESTROY
jne next 6
push NULL
call PostQuitMessage
xor EAX, EAX
ret
next 6:
push lParam
push wParam
push uMsg
push hWin
call DefWindowProc
ret
WndProc endp
end start


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru