Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted by alex ( 16 years ago )
; текст программы
.586
.MODEL FLAT, stdcall
RGBW equ 00D4D0C8h ; цвет фона в окне
include win.inc
.data
HWND DD 0 ; дескриптор главного окна
HINST DD 0 ; дескриптор приложения
TITL DB "Программа",0
CLASSNAME DB 'CLASS32',0
Message MSG <?>
WC WNDCLASS <?>
hdc DD 0 ; дескриптор контекста окна
hPen DD 0 ; дескриптор пера
memdc DD 0 ; дескриптор совместимого контекста окна
CPBUT DB 'Выход',0 ; надпись на кнопке
CLSBTN DB 'BUTTON',0 ; класс окна "КНОПКА"
Height_ DD ? ; высота окна
Width_ DD ? ; ширина окна
rect_ RECT <>
ps PAINTSTRUCT <?>
messX db 'z=y(x)',0
mess_len equ $-messX-1
OffsetX DD 0
OffsetY DD ?
ScaleX DD ?
ScaleY DD ?
X DD 0
Y DD 0
t DD 0
A DD 0
Y1 DD 0
Y2 DD 0
X1 DD 0
X2 DD 0
B DD 0
dva DD 2
tru DD 3
cons DD 1
A1 DD 0
B1 DD 0
Z1 DD 0
Z2 DD 0
deg_rad DD 180
.code
START proc
INVOKE GetModuleHandle, 0 ; получить дескриптор приложения
MOV HINST, EAX
MOV WC.style, CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
; процедура обработки сообщений
MOV WC.lpfnWndProc, OFFSET WNDPROC
MOV EAX, HINST
MOV WC.hInstance, EAX
INVOKE LoadIcon, HINST, 101
MOV WC.hIcon, EAX
INVOKE LoadCursor, HINST, 101
MOV WC.hCursor, EAX
INVOKE CreateSolidBrush, RGBW
MOV WC.hbrBackground, EAX
MOV WC.lpszMenuName, 101
MOV WC.lpszClassName, OFFSET CLASSNAME
INVOKE RegisterClass, OFFSET WC
INVOKE CreateWindowEx, ; создать окно зарегистрированного класса
0,
OFFSET CLASSNAME,
OFFSET TITL,
WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_GROUP + WS_TABSTOP,
100, ; X — координата левого верхнего угла
100, ; Y — координата левого верхнего угла
400, ; DX - ширина окна
450, ; DY — высота окна
0, 0, HINST,0
CMP EAX, 0 ; проверка на ошибку
JZ END_LOOP
MOV HWND, EAX ; дескриптор окна
; --------------------------------------------------
INVOKE ShowWindow, HWND, SW_SHOWNORMAL ; показать созданное окно
INVOKE UpdateWindow, HWND ;перерисовать видимую часть окна
; цикл обработки сообщений
MSG_LOOP:
INVOKE GetMessage,
OFFSET Message, 0,0,0
CMP EAX, 0
JE END_LOOP
INVOKE TranslateMessage, OFFSET Message
INVOKE DispatchMessageA, OFFSET Message
JMP MSG_LOOP
END_LOOP:
; выход из программы (закрыть процесс)
INVOKE ExitProcess, Message.wParam
START endp
; Процедура обработки элементов меню
MenuProc proc hW:DWORD, wParam:DWORD
push eax
mov eax, wParam
cmp eax, 40001
je MEXIT
jmp MEXIT1
MEXIT:
INVOKE PostQuitMessage, 0
MEXIT1:
pop eax
ret
MenuProc endp
; --------------------------------------------------
; процедура окна
; расположение параметров в стеке
; [EBP+014H] LPARAM
; [EBP+10H] WAPARAM
; [EBP+0CH] MES
; [EBP+8] HWND
WNDPROC PROC hW:DWORD, Mes:DWORD, wParam:DWORD, lParam:DWORD
CMP Mes, WM_DESTROY
JE WMDESTROY
CMP Mes, WM_CREATE
JE WMCREATE
CMP Mes, WM_COMMAND
JE WMCOMMAND
CMP Mes, WM_PAINT
JE WMPAINT
CMP Mes, WM_SIZE
JE WMSIZE
JMP DEFWNDPROC
; создание окна
WMCREATE:
WMSIZE:
INVOKE GetDC, hW
mov hdc, eax
INVOKE CreateCompatibleDC, hdc
mov memdc, eax
INVOKE GetWindowRect, hW, offset rect_
mov eax, rect_.bottom
sub eax, rect_.top
mov Height_, eax
mov eax, rect_.right
sub eax, rect_.left
mov Width_, eax
INVOKE CreateCompatibleBitmap,
hdc, Width_, Height_
INVOKE SelectObject, memdc, eax
INVOKE CreateSolidBrush, RGBW
INVOKE SelectObject, memdc, eax
INVOKE PatBlt, memdc, 0, 0, Width_, Height_, PATCOPY
INVOKE ReleaseDC, hW, hdc
INVOKE CreatePen, PS_SOLID, 0,0
mov hPen, eax
INVOKE SelectObject, memdc, hPen
mov eax, Height_
sub eax, 27
shr eax, 1
mov OffsetY, eax
INVOKE MoveToEx, memdc, 0, OffsetY, 0
INVOKE LineTo, memdc, Width_, OffsetY
INVOKE CreatePen, PS_SOLID, 2, 000000FFh
mov hPen, eax
INVOKE SelectObject, memdc, hPen
INVOKE MoveToEx, memdc, 0, OffsetY, 0
mov eax, 0
mov t, eax
mov eax, 8 ; GetSystemMetrics(SM_CXFRAME)*2
mov cons, eax
fild Width_
fisub cons
fidiv deg_rad
mov eax, 2
mov cons, eax
fidiv cons
fstp ScaleX
mov eax, 27 ; GetSystemMetrics(SM_CYFRAME)*2 +
;GetSystemMetrics(SM_CXFRAME)*2
mov cons, eax
fild Height_
fisub cons
mov eax, 2
mov cons, eax
fidiv cons
fstp ScaleY
mov ecx, 360
L: push ecx
fild t
fmul ScaleX
fiadd OffsetX
fistp X
fild t
fldpi
fmulp
fidiv deg_rad
fsin
fchs
fmul ScaleY
fiadd OffsetY
fistp Y
inc t
INVOKE LineTo, memdc, X, Y
pop ecx
loop L
INVOKE InvalidateRect, hW, offset rect_,0
INVOKE SetBkColor, memdc, RGBW
mov eax, mess_len
INVOKE TextOutA,
memdc,
10, 20,
offset messX,
eax
MOV EAX, 0
JMP FINISH
; перерисовка окна
WMPAINT:
INVOKE BeginPaint, hW, offset ps
mov hdc,eax
INVOKE BitBlt, hdc,
0, 0, Width_, Height_,
memdc, 0, 0, SRCCOPY
INVOKE EndPaint, hdc, offset ps
MOV EAX, 0
JMP FINISH
; обработка сообщения по умолчанию
DEFWNDPROC:
INVOKE DefWindowProc,
hW,
Mes,
wParam,
lParam
JMP FINISH
; обработка событий меню
WMCOMMAND:
INVOKE MenuProc, hW, wParam
mov eax, 0
jmp FINISH
WMDESTROY:
INVOKE DeleteDC, hPen
INVOKE DeleteDC, memdc
INVOKE PostQuitMessage, 0
MOV EAX, 0
FINISH:
ret
WNDPROC ENDP
END START
Revise this Paste