Демонстрационная программа

Текст программы:

.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

Используются технологии uCoz