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

📄 floatmenu.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDR_MENU           equ  101
IDM_MESS           equ  40001
IDM_EXIT            equ   40002
IDM_LOMETRIC  equ 40003
IDM_ISO              equ 40004
IDM_ANISO         equ 40005
.data
ClassName       db "WinClass",0
TitleName        db "窗口浮动菜单",0
MenuMess        db "Menu Success!",0
MenuItem0       db "Message",0
MenuItem1       db "Exit",0
Caption            db "window",0
MenuName       db "MyMenu",0
.data?
hInstance	       HINSTANCE ?
hMenu              HMENU ?
hPopupMenu     HMENU ?
pt                    POINT <>
menu               MENUITEMINFO<>
.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   eax,IDR_MENU
        mov   wc.lpszMenuName,eax
        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
        invoke GetMenu,hwnd
        mov hMenu,eax
        .while TRUE
        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
        .if     uMsg==WM_DESTROY
           invoke PostQuitMessage,NULL
        .elseif uMsg==WM_CREATE
           invoke CreatePopupMenu
           mov hPopupMenu,eax
           mov menu.cbSize,sizeof MENUITEMINFO
           mov menu.fMask,MIIM_STRING+MIIM_ID
           mov menu.wID,IDM_MESS
           mov menu.dwTypeData,offset MenuItem0
           invoke InsertMenuItem,hPopupMenu,0,TRUE,addr menu
           mov menu.dwTypeData,offset MenuItem1
           mov menu.wID,IDM_EXIT
           invoke InsertMenuItem,hPopupMenu,1,TRUE,addr menu
        .elseif uMsg==WM_COMMAND
           mov eax,wParam
           .if ax==IDM_MESS
              mov eax,IDR_MENU
              invoke EnableMenuItem,hMenu,IDM_ANISO,MF_GRAYED
              invoke MessageBox,hWnd,addr MenuMess,addr Caption,MB_OK
           .elseif ax==IDM_EXIT
              invoke DestroyWindow,hWnd
           .endif    
        .elseif uMsg==WM_RBUTTONDOWN
           invoke GetCursorPos,addr pt
           invoke TrackPopupMenuEx,hPopupMenu,TPM_BOTTOMALIGN+TPM_RIGHTBUTTON,pt.x,pt.y,hWnd,NULL
        .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 + -