;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 文件名:ModelMenu.asm ; 作 者 :smple ; 网 站 : http://hexun.com/win32asm/default.html ; 编写日期:2010.10.20 ; 编译环境:RadASM + Winxp sp3 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .386 .model flat, stdcall option casemap :none include windows.inc include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib ; ------------------------------常量--------------------------------------------- .const DLG_MAIN equ 1000 IDOK equ 1 IDCANCEL equ 2 ICO_MAIN equ 100 IDM_MAIN equ 2000 IDM_OPEN equ 2101 IDM_GRAY equ 2103 IDM_EXIT equ 2102 IDM_ABOUT equ 2200 ; ------------------------------已初始化变量------------------------------------- .data szCaption db "菜单示例",0 szAbout db "作 者 :smple",0 ; ------------------------------未初始化变量------------------------------------- .data? hInstance dd ? hMenu dd ? ; ------------------------------代码段------------------------------------------- .code _ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam mov eax,wMsg .if eax == WM_CLOSE invoke EndDialog,hWnd,NULL .elseif eax == WM_INITDIALOG invoke LoadIcon,hInstance,ICO_MAIN invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax invoke GetMenu,hWnd mov hMenu,eax .elseif eax == WM_COMMAND mov eax,wParam movzx eax,ax .if eax == IDOK invoke EndDialog,hWnd,NULL .elseif eax == IDM_OPEN mov ebx,eax invoke GetMenuState,hMenu,ebx,MF_BYCOMMAND .if eax == MF_CHECKED mov eax,MF_UNCHECKED push eax invoke EnableMenuItem,hMenu,IDM_GRAY,MF_GRAYED pop eax .else mov eax,MF_CHECKED push eax invoke EnableMenuItem,hMenu,IDM_GRAY,MF_ENABLED pop eax .endif invoke CheckMenuItem,hMenu,ebx,eax .elseif eax == IDM_EXIT invoke EndDialog,hWnd,NULL .elseif eax == IDM_ABOUT invoke MessageBox,hWnd,addr szAbout,addr szCaption,MB_OK .endif .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL invoke ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start