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





Устанавливаем начальное значение высоты шрифта
mov vHeight, 12
push hlnst
pop wc.hlnstance
mov wc.hbrBackground, C0L0R_BTNFACE+7
mov wc.IpszMenuName, NULL
mov wc.IpszClassName, offset szClassName
push IDI_APPLICATION
push NULL
call Loadlcon
mov wc.hlcon, EAX
push IDC_ARROW
push NULL
call LoadCursor
mov wc.hCursor, EAX
mov wc.hlconSm, 0
:DWORD,
DWORD,
DWORD,
DWORD
lea EAX, wc
push SW_SHOWDEFAULT
push CommandLine
push NULL
push hlnstance
call WinMain
push EAX
call ExitProcess
WinMain proc hlnst
hPrevInst
CmdLine
CmdShow
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 ЕАХ
call RegisterClassEx
push
push
NULL
hlnst
push NULL
push NULL
push CW_U S E DE FAU LT
push CW_U S E DE FAU LT
push CW_USEDEFAULT
push СW_U S E DE FAU LT
push WSJDVERLAPPEDWINDOW
push offset szDisplayName
push offset szClassName
push WS_EX_OVERLAPPEDWINDOW
call CreateWindowEx
mov hWnd, EAX
push SW_SHOWNORMAL
push hWnd
call ShowWindow
push hWnd
call UpdateWindow
; Цикл обработки сообщений
StartLoop:
push 0
push 0
push NULL
lea EAX, msg
push EAX
call GetMessage cmp EAX, 0
je ExitLoop
lea
push
EAX, msg
EAX
call TranslateMessage
lea ЕАХ, 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 :HDC
LOCAL ps :PAINTSTRUCT
LOCAL rect :RECT
LOCAL myFont :HFONT
LOCAL tm :TEXTMETRIC
LOCAL tx, ty :DWORD
LOCAL cnt :DWORD
LOCAL x, у :DWORD
cmp uMsg, WM_PAINT
jne next_l
lea ESI, ps
push ESI
push hWin
call BeginPaint
mov hdc, EAX '
invoke SendMessage, hWin, WM_PRINT, hdc, PRF_CLIENT
lea ESI, ps
push ESI
push hWin
call EndPaint
ret
next_l:
cmp uMsg, WM_PRINT
jne next_2
invoke GetDC, hWin
mov hdc, EAX
mov CL, 4 rol colorRef, CL
invoke SetTextColor, hdc, colorRef
invoke GetClientRect, hWin, ADDR rect
invoke GetTextMetrics, hdc, ADDR tm
mov EAX, tm.tmHeight
shl EAX, 1
mov ty, EAX
mov EAX, rect.right
sub EAX, rect.left
xor EDX, EDX
mov ECX, 3
div ECX
mov x, EAX
mov EAX, rect.bottom
sub EAX, rect.top
xor EDX, EDX
mov ECX, 5
div ECX
mov y, EAX
push vHeight
mov cnt, 1
lea ESI, myStr
next_raw:
invoke CreateFont, vHeight, 0, 0, 0, 600, 0, 0, 0, myansi, myout,\
myclip, myq, mypitch, ADDR myf
mov myFont, EAX
invoke SelectObject, hdc, myFont push ESI
call
mov
LenStr
Is, EAX
push
push
push
push
push
call
add
Is
ESI
У
x
hdc
TextOut
vHeight, 3
mov
add
EAX, ty
y, EAX
add ESI, Is
inc ESI
cmp cnt, 3
je cont
inc cnt
jmp next raw
cont:
invoke ReleaseDC, hWin, hdc
pop vHeight
ret
next_2:
cmp uMsg, WM_RJ3UTTONDOWN
jne next_3
invoke GetDC, hWin
mov hdc, EAX
invoke SendMessage, hWin, WM_PRINT, hdc, PRF_CLIENT
invoke ReleaseDC, hWin, hdc
ret
next_3:
cmp
jne
push
uMsg, WM_DESTROY
next_4
NULL
296 Гпава 5
call PostQuitMessage
xor EAX, EAX
ret
next 4:
push lParam
push wParam
push uMsg
push hWin
call DefWindowProc
WndProc endp

Процедура LenStr для определения размера строки
LenStr proc
push EBP
mov EBP, ESP
mov EDX, [EBP+8]
mov EDI, EDX
eld
mov AL, 0
next_check:
scasb
je ex
jmp next_check
ex:
sub EDI, EDX
mov EAX, EDI
dec EAX
pop EBP
ret 4
LenStr endp
end start


 
 
 

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