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

📄 last.asm

📁 对图像做了简单处理
💻 ASM
字号:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include gdi32.inc
includelib kernel32.lib
includelib user32.lib
includelib gdi32.lib
include comdlg32.inc
includelib comdlg32.lib
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
PushButton   PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
LoadBmp1234 proto :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
      szText MACRO Name, Text:VARARG
          LOCAL lbl
          jmp lbl
            Name db Text,0
          lbl:
        ENDM
     m2m macro x,y
      push y
      pop x
     endm
.data
  ClassName   db "Project Class",0
  AppName     db "图显示程序(汇编语言编写)",0
  hInstance   dd 0
  CommandLine dd 0
  hBmp        dd 0
.data
  ofn OPENFILENAME <>
.const
        Tet db "Test",0
	lpFilter db "位图文件",0,"*.bmp",0,0
	lpFile  db 200 dup(0)
	lpTitle db "请选择位图文件",0
.code
  start:
    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke LoadBitmap,hInstance,200
    mov hBmp,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
    invoke ExitProcess,eax
 ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  WinMain proc hInst:HINSTANCE,hPre: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
    mov wc.lpfnWndProc,offset WndProc
    mov wc.cbClsExtra,0
    mov wc.cbWndExtra,0
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_BTNFACE+2
    mov wc.lpszClassName,offset ClassName
    mov wc.lpszMenuName,offset AppName
    invoke LoadCursor,NULL,IDC_CROSS
    mov wc.hCursor,eax
    invoke LoadIcon,NULL,IDI_WINLOGO
    mov wc.hIcon,eax
    mov wc.hIconSm,eax
    invoke RegisterClassEx,addr wc
    invoke CreateWindowEx,WS_EX_LEFT,offset ClassName,offset AppName,WS_OVERLAPPEDWINDOW,200,200,700,600,NULL,NULL,hInst,NULL
    mov hwnd,eax
    invoke ShowWindow,hwnd,CmdShow
    invoke UpdateWindow,hwnd
    .while 1
       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:DWORD
       local memDC:DWORD
       local hOld:DWORD
       local t1:DWORD
       local t2:DWORD
       local t3:DWORD
    .if uMsg==WM_CLOSE
       invoke PostQuitMessage,NULL
    .elseif uMsg==WM_PAINT
       invoke GetDC,hWnd
       mov hDC,eax
       invoke CreateCompatibleDC,hDC
       mov memDC,eax
       invoke SelectObject,memDC,hBmp
       mov hOld,eax
       invoke BitBlt,hDC,10,10,600,340,memDC,0,0,SRCCOPY
       invoke SelectObject,hDC,hOld
       invoke DeleteDC,memDC
	xor eax,eax
       ret
    .elseif uMsg == WM_CREATE
           szText RunIt,"<-Left"
        invoke PushButton,ADDR RunIt,hWnd,40,500,70,25,500
	   szText Rght,"Right->"
	invoke PushButton,addr Rght,hWnd,130,500,70,25,501
	   szText Up,"UP^"
	invoke PushButton,addr Up,hWnd,84,450,70,25,502
	    szText Down,"Downv"
	invoke PushButton,addr Down,hWnd,84,540,70,25,503
	    szText xx9,"OpenTest"
	invoke PushButton,addr xx9,hWnd,220,500,70,25,504
    .elseif uMsg==WM_COMMAND
       .if wParam==500
         invoke GetDC,hWnd
          mov hDC,eax
          invoke LoadBmp1234,hDC,10,10,600,380,1
         ret
       .elseif wParam==501
          invoke GetDC,hWnd
	  mov hDC,eax
	  invoke LoadBmp1234,hDC,10,10,600,380,2
	  ret
       .elseif wParam==502
          invoke GetDC,hWnd
	  mov hDC,eax
	  invoke LoadBmp1234,hDC,10,10,600,380,3
	  ret
       .elseif wParam==503
          invoke GetDC,hWnd
	  mov hDC,eax
	  invoke LoadBmp1234,hDC,10,10,600,380,4
	  ret
       .elseif wParam==504
         mov ofn.lStructSize,sizeof ofn
	 m2m ofn.hwndOwner,hWnd
	 m2m ofn.hInstance,hWnd
	 mov ofn.lpstrFilter,offset lpFilter
	 mov ofn.lpstrFile,offset lpFile
	 mov ofn.lpstrTitle,offset lpTitle
	 mov ofn.nMaxFile,200
	 mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER
         invoke GetOpenFileName,offset ofn
	 ret
       .endif
    .else
       invoke DefWindowProc,hWnd,uMsg,wParam,lParam
       ret
    .endif
    xor eax,eax
    ret
  WndProc endp
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
PushButton proc lpText:DWORD,hParent:DWORD,
                a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
		local hwnd:HWND
    szText btnClass,"BUTTON"
    invoke CreateWindowEx,0,
            ADDR btnClass,lpText,
            WS_CHILD or WS_VISIBLE,
            a,b,wd,ht,hParent,ID,
            hInstance,NULL
    ret
PushButton endp
LoadBmp1234 proc hDC:dword,a:dword,b:dword,wd:dword,ht:dword,flag:dword
                 local memDC:dword
		 local hOld:dword
		 local t1:dword
		 local t2:dword
		 local t3:dword
       invoke CreateCompatibleDC,hDC
       mov memDC,eax
       invoke SelectObject,memDC,hBmp
       mov hOld,eax
       mov ebx,flag
       and bx,1
     .if  bx
        mov t1,0
     .else 
        mov t1,500
     .endif
    l6:
       mov t2,900
    l4:
       mov t3,900
    l2:
       dec t3
       cmp t3,0
       je l1
       jmp l2
    l1:
       dec t2
       cmp t2,0
       je l3
       jmp l4
    l3:
       .if flag>2
          invoke BitBlt,hDC,a,b,wd,ht,memDC,0,t1,SRCCOPY
       .else
          invoke BitBlt,hDC,a,b,wd,ht,memDC,t1,0,SRCCOPY
	.endif
     .if bx
        inc t1
        cmp t1,500
     .else
        dec t1
        cmp t1,0
     .endif
        je l5
        jmp l6
    l5:
       invoke SelectObject,hDC,hOld
       invoke DeleteDC,memDC
       ret
LoadBmp1234 endp
end start

⌨️ 快捷键说明

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