社区
汇编语言
帖子详情
Win32汇编中关于WM_COMMAND消息中wParam的问题
zuchen
2009-05-22 09:58:40
在罗云彬那本书里说WM_COMMAND消息中wParam参数的低16位是命令ID,高16位是通知码,菜单消息的通知码是0加速键的消息的通知码是1所以需要 mov eax, wParam 然后movzx eax, ax来扩展高位冲掉通知码以便用相同代码处理加速键和菜单消息,可是我直接用eax没有扩展却依然可以同时处理菜单键和加速键 我认为wParam的高16位不管是菜单还是加速键都是一致的
这是书上的bug吗?
...全文
194
12
打赏
收藏
Win32汇编中关于WM_COMMAND消息中wParam的问题
在罗云彬那本书里说WM_COMMAND消息中wParam参数的低16位是命令ID,高16位是通知码,菜单消息的通知码是0加速键的消息的通知码是1所以需要 mov eax, wParam 然后movzx eax, ax来扩展高位冲掉通知码以便用相同代码处理加速键和菜单消息,可是我直接用eax没有扩展却依然可以同时处理菜单键和加速键 我认为wParam的高16位不管是菜单还是加速键都是一致的 这是书上的bug吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zuchen
2009-05-23
打赏
举报
回复
对 直接用快捷键发送菜单的ID
这个有问题么?
平台想钱想疯了
2009-05-23
打赏
举报
回复
原来是这样子啊。。我说呢。BUTTON CLICK的时候,高16位,也是,0,只有低16位是,111。跟他说的不一样。
cnzdgs
2009-05-23
打赏
举报
回复
你是用菜单或者工具栏试验的吧?
killbug2004
2009-05-23
打赏
举报
回复
我用spy++记录notepad的WM_COMMAND消息
<00006> 000E1D12 P WM_COMMAND wNotifyCode:0 (从菜单发送) wID:1 [wParam:00000001 lParam:00000000]=======>鼠标选择新建菜单
<00007> 000E1D12 S WM_COMMAND wNotifyCode:1 (从快捷键发送) wID:25 [wParam:00010019 lParam:00000000]====>ctrl+a全选快捷键
这里的加速键(快捷键)是指通过资源定义的 然后在窗口创建过程中LoadAccelerators,在消息循环时TranslateAccelerator转换,这时就可以在窗口过程回调函数中捕获到该加速键消息,通知码为1
而菜单加速键与这不同,系统捕获系统自己转换为对应的菜单项,然后系统以WM_COMMAND消息的形式通知程序,此时的通知码为0作为菜单消息发送,与上面的加速键消息不同
zuchen
2009-05-23
打赏
举报
回复
有解决了 我把WINDOW + 1 强制转换成HBRUSH了
zuchen
2009-05-23
打赏
举报
回复
试了无数次总算知道点眉目了
我开始用hAccelerator = LoadAccelerators(hInstance,IDA_MAIN)载入快捷键但是有一个warning说这个函数的第二个参数类型不正确 IDA_MAIN是数字定义的资源后来加上MAKEINTRESOURCE(IDA_MAIN)把IDA_MAIN强制转换了一下结果OK了 没有warning了观察wParam的值也正确了
原来是参数问题
这个问题Over
还有一个warning是说stWndClass.hbrBackground = COLOR_WINDOW + 1;
“=”: “HBRUSH”与“int”的间接级别不同 这个怎么把COLOR_WINDOW + 1转换啊
现在测试用的是C
zuchen
2009-05-23
打赏
举报
回复
我用的是通过资源定义的 然后在窗口创建过程中LoadAccelerators,在消息循环时TranslateAccelerator转换的那种 不是字母前面加&的那种 按理说应该高位为1
xiaopoy
2009-05-23
打赏
举报
回复
强制转换了。(?)
cnzdgs
2009-05-23
打赏
举报
回复
[Quote=引用 5 楼 zuchen 的回复:]
对 直接用快捷键发送菜单的ID
这个有问题么?
[/Quote]
快捷键与加速键是不同的。例如“文件”菜单中的“新建”命令,用Alt+F+N是该菜单的快捷键,Ctrl+N才是加速键。快捷键相当于点击菜单项,wParam高WORD为0;加速键是指令产生某个ID的命令,wParam高WORD为1,加速键不一定要有对应的菜单项。
zuchen
2009-05-22
打赏
举报
回复
我直接用.if eax == wParam 没有处理高16位情况 也可以处理加速键
另外我用C做了测试直接
switch(wParam)
{
IDM_TEXT:...
break;
....
}
也成功 也就是说程序没有比较高位情况但是这不应该啊
cnzdgs
2009-05-22
打赏
举报
回复
加速键的消息的通知码是1没错,你的代码是怎么写的?
另外提一下,mov eax, wParam 然后movzx eax, ax这种做法比较麻烦,直接用ax判断即可。
zuchen
2009-05-22
打赏
举报
回复
刚才看了下MSDN上面和罗云彬的书上是一样的
那我猜想是在比较我的菜单ID时只比较了低16位 高16位自动忽略了
但想不通 为什么会忽略?
win32
汇编
环境,窗口程序
中
对按钮控件常用操作的示例
开发者需要在
消息
循环
中
识别
WM
_
COMMAND
消息
,并通过检查
wPa
ram
参数来确定
消息
来源是哪一个控件。如果
消息
是由按钮产生的,那么可以根据
消息
的低字节和高字节的值来判断是哪一个按钮被点击,并执行相应的事件处理代码...
win32
汇编
环境,窗口程序
中
自定义工具栏的使用示例三
在深入探讨
win32
汇编
环境下创建自定义工具栏的示例程序之前,我们需要了解
win32
汇编
语言的基础知识以及它在编程
中
的应用。
Win32
汇编
语言是针对Windows操作系统的32位应用程序设计的一种
汇编
语言,它在Windows平台上...
win32
汇编
环境,对话框程序
中
对按钮控件常用操作的示例
开发者需要在
消息
处理函数
中
添加对
WM
_
COMMAND
消息
的处理代码,通过比较
消息
的
wPa
ram
参数确定是哪个按钮被触发,并执行相应的动作。 在编程实践
中
,通常会使用回调函数来处理控件事件。为按钮控件设置的回调函数会在...
win32
汇编
环境,窗口程序
中
组合框的应用举例
在窗口程序
中
使用组合框的过程
中
,通常需要处理
WM
_
COMMAND
消息
,该
消息
会在用户与组合框交互时被发送到窗口过程函数。通过检查
消息
的
wPa
ram
参数,可以知道事件源自哪一个控件,进而执行相应的操作,例如更新程序状态...
win32
汇编
环境,窗口程序
中
复杂列表框的应用举例
而用户交互的响应,比如当用户选择列表框
中
的某一项时,我们需要在窗口过程函数
中
处理
WM
_
COMMAND
消息
,并判断该
消息
的
wPa
ram
参数是否为列表框的标识符。 此外,我们还可以对列表框进行更复杂的操作,比如通过LVM_...
汇编语言
21,499
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章