欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > win32汇编环境,窗口程序中使用菜单示例二

win32汇编环境,窗口程序中使用菜单示例二

2025/2/23 20:04:46 来源:https://blog.csdn.net/iltokyo/article/details/145802566  浏览:    关键词:win32汇编环境,窗口程序中使用菜单示例二

;运行效果

;win32汇编环境,窗口程序中使用菜单示例二
;最基本的应用,通过将资源里的菜单载入窗口的模式,添加菜单及点击后响应的操作方法
;直接抄进RadAsm可编译运行。重要部分加备注。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc
include      kernel32.inc 
 
includelib   user32.lib           
includelib   kernel32.lib 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       
                                                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的模版",0
szMenuName  db "IDM_MAIN",0            ;设定在资源文件里的菜单名

szMsg       db "提示",0
szMen11     db "点击了菜单:开始",0 
szMen21     db "点击了菜单: 功能01",0    

.DATA?                                  
hInstance      HINSTANCE  ?                
CommandLine    LPSTR      ? 

hMenu          HMENU      ?                    ; 菜单句柄

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Equ 等值定义
IDM_011     equ 11         ;某项的标识符
IDM_012     equ 12
IDM_021     equ 21
IDM_022     equ 22
IDM_023     equ 23
IDM_031     equ 31          
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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  hInstance 
        pop   wc.hInstance 
        mov   wc.hbrBackground,COLOR_WINDOW 
        mov   wc.lpszMenuName,NULL 
        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 LoadMenu,hInstance,addr szMenuName     ;加载菜单资源
        mov  hMenu,eax                                ;保存菜单句柄
        invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,100,100,400,300, NULL,hMenu,hInst, NULL      ;在里面加入前面保存到的菜单句柄 hMenu
        mov  hwnd,eax 
        invoke ShowWindow, hwnd,CmdShow                              
         invoke UpdateWindow, hwnd                                    

        .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_CREATE                
        .elseif    uMsg == WM_COMMAND
            mov eax,wParam      ;wParam的底位字节是标识符
            .if ax == IDM_011
                    invoke MessageBox,NULL,addr szMen11,addr szMsg,MB_OK
            .elseif ax == IDM_021
                    invoke MessageBox,NULL,addr szMen21,addr szMsg,MB_OK
            .elseif ax == IDM_012
                    invoke PostQuitMessage,NULL                
            .endif            
        .elseif uMsg == WM_DESTROY                                           
                invoke PostQuitMessage,NULL                               
        .else 
                invoke DefWindowProc,hWnd,uMsg,wParam,lParam             
        ret 
    .endif 
    xor eax,eax 
    ret 
WndProc endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start                                                      

;下面为rc文件内容
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define    IDM_011  11
#define    IDM_012  12
#define    IDM_021  21
#define    IDM_022  22
#define    IDM_023  23
#define    IDM_031  31
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDM_MAIN    menu    discardable
BEGIN
    popup    "文件(&F)"
    BEGIN
        menuitem    "开始",    IDM_011
        menuitem    separator           //沉底分隔条
        menuitem    "退出",    IDM_012
    END
    popup    "命令(&C)"
    BEGIN
        menuitem    "功能01",    IDM_021
        menuitem    "功能02",    IDM_022
        menuitem    "功能03",    IDM_023
    END
    popup    "帮助(&H)"
    BEGIN
        menuitem    "帮助",    IDM_031
    END
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词