Win32汇编--菜单进阶之菜单的单选与多选(CheckMenuItem&CheckMenuRadioItem)

有的时候,菜单中会有单选和多选,如图:

其实主要是通过两个函数CheckMenuItem和CheckMenuRadioItem来实现,

创建好菜单后,在回调函数的WM_COMMAND中进行处理就可以了.

以下是创建菜单和WM_COMMAND消息响应的部分代码(完整工程下载)

;;==================================================== ;;创建菜单的子程序 ;;==================================================== _CreateMenu proc LOCAL @hMenu LOCAL @hPopMenu1 LOCAL @hPopMenu2 LOCAL @hPopMenu3 invoke CreateMenu mov @hMenu,eax ;;-------------------------------------------------- invoke CreatePopupMenu mov @hPopMenu1,eax invoke AppendMenu,@hPopMenu1,MF_STRING,IDM_OPEN,CTEXT("Open") invoke AppendMenu,@hPopMenu1,MF_STRING,IDM_EXIT,CTEXT("Exit") ;;-------------------------------------------------- invoke CreatePopupMenu mov @hPopMenu2,eax invoke AppendMenu,@hPopMenu2,MF_STRING,IDM_BIG,CTEXT("Big") invoke AppendMenu,@hPopMenu2,MF_STRING,IDM_MIDDLE,CTEXT("Middle") invoke AppendMenu,@hPopMenu2,MF_STRING,IDM_SMALL,CTEXT("Small") ;;-------------------------------------------------- invoke CreatePopupMenu mov @hPopMenu3,eax invoke AppendMenu,@hPopMenu3,MF_STRING,IDM_TOOLBAR,CTEXT("ToolBar") invoke AppendMenu,@hPopMenu3,MF_STRING,IDM_STATUSBAR,CTEXT("StatusBar") invoke AppendMenu,@hPopMenu3,MF_STRING,IDM_SIDEBAR,CTEXT("SideBar") ;;-------------------------------------------------- invoke AppendMenu,@hMenu,MF_POPUP,@hPopMenu1,CTEXT("File") invoke AppendMenu,@hMenu,MF_POPUP,@hPopMenu2,CTEXT("Single Check") invoke AppendMenu,@hMenu,MF_POPUP,@hPopMenu3,CTEXT("Multi Check") push @hMenu pop eax ret _CreateMenu endp ;;==================================================== ;;==================================================== ;;消息响应中的WM_COMMAND部分 ;;==================================================== .elseif eax==WM_COMMAND mov eax,wParam movzx eax,ax ;;------------[single check]------------------------------------- .if eax>=IDM_BIG && eax<=IDM_SMALL .if eax==IDM_BIG invoke CheckMenuRadioItem,hMenu,IDM_BIG,IDM_SMALL,ax,MF_BYCOMMAND invoke MessageBox,NULL,CTEXT("Big Checked"),CTEXT("INFO"),MB_OK .elseif eax==IDM_MIDDLE invoke CheckMenuRadioItem,hMenu,IDM_BIG,IDM_SMALL,ax,MF_BYCOMMAND invoke MessageBox,NULL,CTEXT("Middle Checked"),CTEXT("INFO"),MB_OK .elseif eax==IDM_SMALL invoke CheckMenuRadioItem,hMenu,IDM_BIG,IDM_SMALL,ax,MF_BYCOMMAND invoke MessageBox,NULL,CTEXT("Small Checked"),CTEXT("INFO"),MB_OK .endif ;;-----------[multi check]--------------------------------------- .elseif eax>=IDM_TOOLBAR && eax<=IDM_SIDEBAR mov ebx,eax .if eax==IDM_TOOLBAR invoke GetMenuState,hMenu,ebx,MF_BYCOMMAND .if eax==MF_CHECKED invoke MessageBox,NULL,CTEXT("ToolBar Unchecked"),CTEXT("INFO"),MB_OK mov eax,MF_UNCHECKED .else invoke MessageBox,NULL,CTEXT("ToolBar Checked"),CTEXT("INFO"),MB_OK mov eax,MF_CHECKED .endif invoke CheckMenuItem,hMenu,ebx,eax .elseif eax==IDM_STATUSBAR invoke GetMenuState,hMenu,ebx,MF_BYCOMMAND .if eax==MF_CHECKED invoke MessageBox,NULL,CTEXT("StatusBar Unchecked"),CTEXT("INFO"),MB_OK mov eax,MF_UNCHECKED .else invoke MessageBox,NULL,CTEXT("StatusBar Checked"),CTEXT("INFO"),MB_OK mov eax,MF_CHECKED .endif invoke CheckMenuItem,hMenu,ebx,eax .elseif eax==IDM_SIDEBAR invoke GetMenuState,hMenu,ebx,MF_BYCOMMAND .if eax==MF_CHECKED invoke MessageBox,NULL,CTEXT("SideBar Unchecked"),CTEXT("INFO"),MB_OK mov eax,MF_UNCHECKED .else invoke MessageBox,NULL,CTEXT("SideBar Checked"),CTEXT("INFO"),MB_OK mov eax,MF_CHECKED .endif invoke CheckMenuItem,hMenu,ebx,eax .endif .endif

转载于:https://www.cnblogs.com/wbbice/archive/2012/09/03/2669466.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值