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

📄 menu.asm

📁 一个简单的菜单窗口程序,适合处学者应用改编,增加其他功能.
💻 ASM
字号:
.386 
.model flat,stdcall 
option casemap:none 

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD 

include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\user32.lib 
includelib \masm32\lib\kernel32.lib 

.data 
ClassName db "SimpleWinClass",0 
AppName db "Our First Window",0 
MenuName db "FirstMenu",0 
Test_string db "You selected Test menu item",0 
Hello_string db "Hello, world!",0 
Goodbye_string db "See you again!",0 

.data? 
hInstance HINSTANCE ? 
CommandLine LPSTR ? 

.const 
IDM_TEST equ 1 ; 菜单ID
IDM_HELLO equ 2 
IDM_GOODBYE equ 3 
IDM_EXIT equ 4 

.code 
start: 
invoke GetModuleHandle, NULL 
mov hInstance,eax 
invoke GetCommandLine
mov CommandLine,eax 
invoke WinMain, hInstance,NULL,CommandLine, 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 
mov wc.lpfnWndProc, OFFSET WndProc 
mov wc.cbClsExtra,NULL 
mov wc.cbWndExtra,NULL 
push hInst 
pop wc.hInstance 
mov wc.hbrBackground,COLOR_WINDOW+1 
mov wc.lpszMenuName,OFFSET MenuName 
mov wc.lpszClassName,OFFSET ClassName 
invoke LoadIcon,NULL,IDI_APPLICATION 
mov wc.hIcon,eax 
mov wc.hIconSm,eax 
invoke LoadCursor,NULL,IDC_ARROW 
mov wc.hCursor,eax 
invoke RegisterClassEx, addr wc 
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ 
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ 
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ 
hInst,NULL 
mov hwnd,eax 
invoke ShowWindow, hwnd,SW_SHOWNORMAL 
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_TEST 
invoke MessageBox,NULL,ADDR Test_string,OFFSET AppName,MB_OK 
.ELSEIF ax==IDM_HELLO 
invoke MessageBox, NULL,ADDR Hello_string, OFFSET AppName,MB_OK 
.ELSEIF ax==IDM_GOODBYE 
invoke MessageBox,NULL,ADDR Goodbye_string, OFFSET AppName, MB_OK 
.ELSE 
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 + -