关于WM_SYSCOMMAND消息的问题
老师:在学习小甲鱼老师的<<Win32汇编语言程序设计>>第40讲的时候发现一个问题,在讲课中提到如果把一个菜单添加到了系统菜单,那选中它之后,Windows向窗口发送的是WM_SYSCOMMAND消息,而非WM_COMMAND消息.
于是我把小甲鱼的课件程序修改了一下,但是发现这个被添加到系统菜单的菜单项选中时并不像预期的那样触发WM_SYSCOMMAND消息,而还是和以前一样触发的WM_COMMAND消息,这是为什么呢?
但是系统默认的系统菜单是可以正常触发WM_SYSCOMMAND消息的,难道非系统默认的菜单就不行吗?
......
.elseif eax == WM_COMMAND ; 这个消息始终能够被触发
invoke _DisplayMenuItem,wParam
mov eax,wParam
movzx eax,ax
.......
; 在系统菜单中添加菜单项
;********************************************************************
invoke GetSystemMenu,hWnd,FALSE
mov @hSysMenu,eax
invoke AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL
invoke AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invoke AppendMenu,@hSysMenu,NULL,IDM_ABOUT,offset szMenuAbout
.......
elseif eax == WM_SYSCOMMAND
mov eax,wParam
movzx eax,ax
.if eax == IDM_HELP || eax == IDM_ABOUT
; invoke _DisplayMenuItem,wParam
invoke MessageBox,hWinMain,offset szMenuHelp,offset szCaption,MB_OK ; 这一句是我添加的,目的是为了区别WM_COMMAND消息产生的结果,但是程序始终没有调用这一句.
.else
........
这已经成功添加了,但可能是你点击的菜单不对,不是点击菜单栏的帮助了,而是如下图:
WM_SYSCOMMAND ---》 WindowsMessage_SystemCommand
WM_COMMAND -------》 WindowsMessage_Command
所以肯定是系统菜单啦
自定义菜单要用WM_COMMAND
MSDN 没看。。不过应该也是这样 向往青莲 发表于 2014-1-11 15:19 static/image/common/back.gif
WM_SYSCOMMAND ---》 WindowsMessage_SystemCommand
WM_COMMAND -------》 WindowsMessage_Command
但是我已经用下面的方法:
invoke AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invoke AppendMenu,@hSysMenu,NULL,IDM_ABOUT,offset szMenuAbout
把HELP和ABOUT两个子菜单添加到了系统菜单啊,为什么选中的时候不能发出"WM_SYSTEMCOMMAND"消息呢?它只能发出"WM_COMMAND"消息 阿科 发表于 2014-1-11 18:15 static/image/common/back.gif
但是我已经用下面的方法:
invoke AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invo ...
把 invoke GetSystemMenu,hWnd,FALSE
改为 invoke GetSystemMenu,hWnd,TRUE
试试 向往青莲 发表于 2014-1-11 18:48 static/image/common/back.gif
把 invoke GetSystemMenu,hWnd,FALSE
改为 invoke GetSystemMenu,hWnd,TRUE
试试
这个方法还是不行.我后来也查了MSDN,必须用FALSE做参数才能够修改系统菜单(能够往里面加菜单),如果设置为TRUE,则不能对系统菜单进行修改,所以这个方法不能达到目的.
请高手再次指点一下如何做,如果需要原程序,附件里有. 下载下来看了下,右键没发现你所添加的系统菜单项啊 添加系统菜单一定要加到右键的消息里吗?
程序中我已经用了:
invoke GetSystemMenu,hWnd,FALSE
mov @hSysMenu,eax
invoke AppendMenu,@hSysMenu,MF_SEPARATOR,0,NULL
invoke AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invoke AppendMenu,@hSysMenu,NULL,IDM_ABOUT,offset szMenuAbout
这种方式添加进系统菜单,难道还不行吗?愿闻其详! 书上是这样说的,你可以好好看看:
lenovolty 发表于 2014-1-9 19:37 static/image/common/back.gif
这已经成功添加了,但可能是你点击的菜单不对,不是点击菜单栏的帮助了,而是如下图:
听君一席话,胜读十年书啊,真是感谢啊
页:
[1]