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

📄 菜单.asm

📁 DOS_Windows汇编语言程序设计教程
💻 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 "我的第一个菜单",0
MenuName db "FirstMenu",0
Test_string db "请选择测试菜单项",0
Hello_string db "Hello, my friend",0
Goodbye_string db "See you again, bye",0
szAppName	db "FirstMenu",0
.data
hInstance     dd    0
CommandLine   dd    0
.const
IDM_TEST equ 1
IDM_HELLO equ 2
IDM_GOODBYE equ 3
IDM_EXIT equ 4
.code
start:
	invoke GetModuleHandle, NULL
	mov    hInstance,eax
	invoke GetCommandLine
	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
	StartLoop:
    invoke GetMessage,ADDR msg,NULL,0,0
    cmp eax, 0
    je ExitLoop
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage,  ADDR msg
    jmp StartLoop
ExitLoop:
    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 + -