鱼C论坛

 找回密码
 立即注册
查看: 3135|回复: 9

关于WM_SYSCOMMAND消息的问题

[复制链接]
发表于 2014-1-9 19:37:05 | 显示全部楼层 |阅读模式
6鱼币
老师:
       在学习小甲鱼老师的<<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
                        ........      

最佳答案

查看完整内容

这已经成功添加了,但可能是你点击的菜单不对,不是点击菜单栏的帮助了,而是如下图:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-9 19:37:06 | 显示全部楼层
这已经成功添加了,但可能是你点击的菜单不对,不是点击菜单栏的帮助了,而是如下图:
11.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-11 15:19:27 | 显示全部楼层
WM_SYSCOMMAND ---》 WindowsMessage_SystemCommand
WM_COMMAND -------》 WindowsMessage_Command

所以肯定是系统菜单啦
自定义菜单要用WM_COMMAND

MSDN 没看。。不过应该也是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-11 18:15:22 | 显示全部楼层

但是我已经用下面的方法:
invoke        AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invoke        AppendMenu,@hSysMenu,NULL,IDM_ABOUT,offset szMenuAbout
把HELP和ABOUT两个子菜单添加到了系统菜单啊,为什么选中的时候不能发出"WM_SYSTEMCOMMAND"消息呢?它只能发出"WM_COMMAND"消息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-11 18:48:15 | 显示全部楼层
阿科 发表于 2014-1-11 18:15
但是我已经用下面的方法:
invoke        AppendMenu,@hSysMenu,NULL,IDM_HELP,offset szMenuHelp
invo ...

把    invoke        GetSystemMenu,hWnd,FALSE
改为 invoke        GetSystemMenu,hWnd,TRUE
试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-11 19:35:41 | 显示全部楼层
向往青莲 发表于 2014-1-11 18:48
把    invoke        GetSystemMenu,hWnd,FALSE
改为 invoke        GetSystemMenu,hWnd,TRUE
试试

  这个方法还是不行.我后来也查了MSDN,必须用FALSE做参数才能够修改系统菜单(能够往里面加菜单),如果设置为TRUE,则不能对系统菜单进行修改,所以这个方法不能达到目的.
  请高手再次指点一下如何做,如果需要原程序,附件里有.

Menu.rar

7.29 KB, 下载次数: 7

菜单原程序

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-12 23:30:38 | 显示全部楼层
下载下来看了下,右键没发现你所添加的系统菜单项啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-13 09:01:46 | 显示全部楼层
添加系统菜单一定要加到右键的消息里吗?
程序中我已经用了:
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
这种方式添加进系统菜单,难道还不行吗?愿闻其详!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-27 16:37:47 | 显示全部楼层
书上是这样说的,你可以好好看看:
2.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-28 11:48:26 | 显示全部楼层
lenovolty 发表于 2014-1-9 19:37
这已经成功添加了,但可能是你点击的菜单不对,不是点击菜单栏的帮助了,而是如下图:

听君一席话,胜读十年书啊,真是感谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 09:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表