
TBN.ru
|
GraphDemo:
Текст программы:
.386
.model flat, stdcall
include win32.inc
extrn BeginPaint:PROC
extrn BitBlt:PROC
extrn
CreateCompatibleBitmap:PROC
extrn
CreateCompatibleDC:PROC
extrn
CreateHatchBrush:PROC
extrn CreatePen:PROC
extrn
CreateWindowExA:PROC
extrn
DefWindowProcA:PROC
extrn DeleteDC:PROC
extrn DeleteObject:PROC
extrn
DispatchMessageA:PROC
extrn Ellipse:PROC
extrn EndPaint:PROC
extrn ExitProcess:PROC
extrn GetClientRect:PROC
extrn GetMessageA:PROC
extrn
GetModuleHandleA:PROC
extrn
GetStockObject:PROC
extrn LineTo:PROC
extrn LoadCursorA:PROC
extrn LoadIconA:PROC
extrn MoveToEx:PROC
extrn PatBlt:PROC
extrn
PostQuitMessage:PROC
extrn Rectangle:PROC
extrn
RegisterClassA:PROC
extrn SelectObject:PROC
extrn SetPixel:PROC
extrn ShowWindow:PROC
extrn
TranslateMessage:PROC
extrn UpdateWindow:PROC
BITMAP struct
bmType dd ?
bmWidth dd ?
bmHeight dd ?
bmWidthBytes dd ?
bmPlanes dw ?
bmBitsPixel dw ?
bmBits dd ?
BITMAP ends
SRCCOPY = 00CC0020h
PATCOPY = 00F00021h
TRUE = 1
FALSE = 0
.data
newhwnd dd 0
msg
MSGSTRUCT >
wc
WNDCLASS >
Rect RECT >
hDC dd ?
hCompatibleDC dd ?
PaintStruct PAINTSTRUCT >
hCompatibleBitmap dd ?
hBitmap dd ?
hOldBitmap dd ?
hOldPen dd ?
hOldBrush dd ?
Pens dd 2 dup(?)
Brushes dd 2 dup(?)
hInstance dd 0
szTitleName db 'GraphDemo', 0
szClassName db 'ASMCLASS32',0
x
dd ?
y
dd ?
p
dd ?
.code
;-----------------------------------------------------------------------------
start:
call GetModuleHandleA, 0
mov [hInstance], eax
; initialize the WndClass structure
mov [wc.clsStyle],
CS_HREDRAW + CS_VREDRAW
mov
[wc.clsLpfnWndProc], offset GraphDemoWndProc
mov [wc.clsCbClsExtra],
0
mov [wc.clsCbWndExtra],
0
mov eax, [hInstance]
mov [wc.clsHInstance],
eax
call LoadIconA, 0,
IDI_APPLICATION
mov [wc.clsHIcon], eax
call LoadCursorA, 0
,IDC_ARROW
mov [wc.clsHCursor],
eax
call GetStockObject,
WHITE_BRUSH
mov
[wc.clsHbrBackground], eax
mov
[wc.clsLpszMenuName], 0
mov
[wc.clsLpszClassName], offset szClassName
call RegisterClassA, offset
wc
call CreateWindowExA,
0,offset szClassName,offset szTitleName, \
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, \
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0, \
[hInstance], 0
mov [newhwnd], eax
call ShowWindow, [newhwnd],
SW_SHOWNORMAL
call UpdateWindow, [newhwnd]
msg_loop:
call GetMessageA, offset msg,
0, 0, 0
.if eax != 0
call TranslateMessage, offset msg
call DispatchMessageA, offset msg
jmp msg_loop
.endif
call ExitProcess,
[msg.msWPARAM]
;-----------------------------------------------------------------------------
GraphDemoWndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,\
wparam:DWORD, lparam:DWORD
cmp [wmsg], WM_PAINT
je wmpaint
cmp [wmsg], WM_DESTROY
je wmdestroy
call DefWindowProcA,
[hwnd],[wmsg],[wparam],[lparam]
jmp finish
wmpaint:
;---------------------------------------
call CreatePen, 1,0,0FF0000h
mov [dword ptr Pens],
eax
call CreatePen, 3,0,000000h
mov [dword ptr Pens+4],
eax
call CreateHatchBrush,
1,00000FFh
mov [dword ptr
Brushes], eax
call CreateHatchBrush,
2,0FF0080h
mov [dword ptr
Brushes+4], eax
;---------------------------------------
call GetClientRect, [hwnd],
offset Rect
call BeginPaint, [hwnd],
offset PaintStruct
mov [hDC], eax
call CreateCompatibleDC,
[hDC]
mov [hCompatibleDC],
eax
call GetClientRect, [hwnd],
offset Rect
call CreateCompatibleBitmap,
[hDC],[Rect.rcRight],[Rect.rcBottom]
mov
[hCompatibleBitmap], eax
call SelectObject,
[hCompatibleDC],[hCompatibleBitmap]
mov [hOldBitmap], eax
call PatBlt,
[hCompatibleDC],0,0,[Rect.rcRight], \
[Rect.rcBottom], PATCOPY
;---------------------------------------
mov [x], 0
mov [y], 0
mov [p], 0
@@lp2:
call SetPixel,
[hCompatibleDC],[x],[y],00FF0000h
.if eax == -1
mov [x], 0
add [y], 10h
.endif
add [x], 10h
.if eax == -1
cmp [p], -1
jz @@lp3
.endif
mov [p], eax
jmp @@lp2
@@lp3:
;---------------------------------------
call SelectObject,
[hCompatibleDC],[dword ptr Pens]
mov [hOldPen], eax
call MoveToEx,
[hCompatibleDC],[Rect.rcLeft],[Rect.rcTop],0
call LineTo,
[hCompatibleDC],[Rect.rcRight],[Rect.rcBottom]
call SelectObject,
[hCompatibleDC],[dword ptr Pens+4]
call MoveToEx,
[hCompatibleDC],[Rect.rcRight],[Rect.rcTop],0
call LineTo,
[hCompatibleDC],[Rect.rcLeft],[Rect.rcBottom]
call SelectObject,
[hCompatibleDC],[hOldPen]
;=======================================
call SelectObject,
[hCompatibleDC],[dword ptr Brushes]
mov [hOldBrush], eax
call Rectangle,
[hCompatibleDC],100,75,450,200
call SelectObject,
[hCompatibleDC],[dword ptr Brushes+4]
call Ellipse,
[hCompatibleDC],50,50,200,100
call SelectObject,
[hCompatibleDC],[hOldBrush]
;=======================================
call BitBlt,
[hDC],[PaintStruct.PSrcPaint.rcLeft], \
[PaintStruct.PSrcPaint.rcTop], \
[PaintStruct.PSrcPaint.rcRight], \
[PaintStruct.PSrcPaint.rcBottom], \
[hCompatibleDC], \
[PaintStruct.PSrcPaint.rcLeft], \
[PaintStruct.PSrcPaint.rcTop], \
SRCCOPY
call DeleteObject, [dword ptr
Pens]
call DeleteObject, [dword ptr
Pens+4]
call DeleteObject, [dword ptr
Brushes]
call DeleteObject, [dword ptr
Brushes+4]
call SelectObject,
[hCompatibleDC], [hOldBitmap]
call DeleteObject,
[hCompatibleBitmap]
call DeleteDC,
[hCompatibleDC]
call EndPaint, [hwnd],offset
PaintStruct
mov eax, 0
jmp finish
wmdestroy:
call DeleteObject, [hBitmap]
call PostQuitMessage, 0
mov eax, 0
finish:
ret
GraphDemoWndProc endp
ends
end start
|