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

📄 simplemenu.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_OPEN      equ 1
IDM_SAVE       equ 2
IDM_PRINT     equ 3
IDM_SAVEAS   equ 4
IDM_EXIT        equ 5
IDM_CUT         equ 6
IDM_COPY       equ 7
IDM_PASTE     equ 8
IDM_HELP       equ 9

.data
ClassName        db "WinClass",0
TitleName          db "窗口菜单",0
MenuName        db "MyMenu",0
MenuOpen        db "文件打开项!",0
Help                 db "帮助项!",0
.data?
hInstance	HINSTANCE ?
.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,offset MenuName
        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 DispatchMessage, addr msg
        .endw
        mov eax,msg.wParam
        ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
        .if     uMsg==WM_DESTROY
           invoke PostQuitMessage,NULL
        .elseif  uMsg==WM_COMMAND
            mov eax,wParam
            .if  ax==IDM_OPEN
               invoke MessageBox,hWnd,addr MenuOpen,addr TitleName,MB_OK
            .elseif  ax==IDM_HELP
               invoke MessageBox,hWnd,addr Help,addr TitleName,MB_OK
            ;其它项省略。
            .elseif  ax==IDM_EXIT
               invoke DestroyWindow,hWnd		
            .endif
        .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 + -