⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphics.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
ClassName       db "WinClass",0
TitleName        db "鼠标绘图",0
.data?
hInstance	     HINSTANCE ?
hp                  HPEN  ?
oldhp              HPEN  ?
hBrush            HBRUSH ?
oldhBrush        HBRUSH ?
Rect                RECT  <>
.code
start:
        invoke GetModuleHandle, NULL
        mov    hInstance,eax
        invoke WinMain, NULL,NULL,NULL, SW_SHOWDEFAULT
        invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
        LOCAL wc:WNDCLASSEX
        LOCAL msg:MSG
        LOCAL hwnd:HWND
        mov   wc.cbSize,SIZEOF WNDCLASSEX
        mov   wc.style, CS_HREDRAW or CS_VREDRAW or CS_DBLCLKS
        mov   wc.lpfnWndProc, OFFSET WndProc
        mov   wc.cbClsExtra,NULL
        mov   wc.cbWndExtra,NULL
        mov   eax, hInstance
        mov   wc.hInstance,eax
        invoke GetStockObject,WHITE_BRUSH 
        mov   wc.hbrBackground,eax
        mov   wc.lpszMenuName,NULL
        mov   wc.lpszClassName,OFFSET ClassName
        invoke LoadIcon,NULL,IDI_ASTERISK
        mov   wc.hIcon,eax
        mov   wc.hIconSm,0
        invoke LoadCursor,NULL,IDC_HAND
        mov   wc.hCursor,eax
        invoke RegisterClassEx, addr wc
        invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
           addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
           NULL,NULL,hInst,NULL
        mov   hwnd,eax
        invoke ShowWindow,hwnd,CmdShow
        invoke UpdateWindow,hwnd
        .while TRUE
           invoke GetMessage, addr msg,NULL,0,0
              .BREAK .IF (!eax)
           invoke TranslateMessage,addr msg
           invoke DispatchMessage, addr msg
        .endw
        mov eax,msg.wParam
        ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
       local hdc:HDC
       local ps:PAINTSTRUCT
       .if     uMsg==WM_DESTROY
          invoke DeleteObject,hp
          invoke DeleteObject,oldhp
          invoke DeleteObject,hBrush
          invoke DeleteObject,oldhBrush
          invoke PostQuitMessage,NULL
      .elseif uMsg==WM_PAINT
         invoke BeginPaint,hWnd,addr ps
         mov   hdc,eax
         RGB 0FFh,0,0
         invoke CreatePen,PS_INSIDEFRAME,2,eax
         mov hp,eax
         invoke SelectObject,hdc,hp
         mov oldhp,eax
         RGB 0,0,0ffh
         invoke CreateHatchBrush,HS_DIAGCROSS,eax
         mov hBrush,eax
         invoke SelectObject,hdc,hBrush
         mov oldhBrush,eax
         invoke Ellipse,hdc, Rect.left,Rect.top,Rect.right,Rect.bottom
         invoke SelectObject,hdc,oldhp
         invoke SelectObject,hdc,oldhBrush
         invoke EndPaint  ,hWnd,addr ps
      .elseif uMsg==WM_LBUTTONUP
         mov eax,lParam
         mov edx,eax
         movzx eax,ax
         mov Rect.right,eax
         mov eax,edx
         shr eax,16
         movzx eax,ax
         mov Rect.bottom,eax                
         invoke InvalidateRect, hWnd,addr Rect,0            
      .elseif uMsg==WM_LBUTTONDOWN
         mov eax,lParam
         mov edx,eax
         movzx eax,ax
         mov Rect.left,eax
         mov eax,edx
         shr eax,16
         movzx eax,ax
         mov Rect.top,eax
      .else
         invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
         ret
      .endif
      xor eax,eax
      ret
WndProc endp
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -