请问Win32汇编中怎样定义处理自己定义消息?

aroky_zxc 2006-05-21 09:21:40
VC定义得消息:
MyMessage = WM_USER+100怎样在汇编下定义,WM_USER能直接用嘛?
而且在汇编中怎样捕获这消息?
是不是在WndProc中也像其他一样
.if uMsg ==MyMessage
invoke MyMessageProc

...全文
186 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
已经在WM_COMMAND 平行的处理上进行 uMsg == WM_INT
但是得不到结果,执行断点并不能执行倒uMsg == WM_INT这个语句,就是没法捕捉到改WM_INT消息
zara 2006-05-23
  • 打赏
  • 举报
回复
看上面的代码, 你这个是在个对话框中的 WM_COMMAND 的处理中的吧? 如果 WM_INT 是发到给对话框的话, 就是和 WM_COMMAND 平行的处理上, 就象是:
...
elseif uMsg == WM_COMMAND
....
elseif uMsg == WM_INT
...
else
invoke DefDlgProc, ....
...
可以在调试程序中, 在对话框例程的开始设个条件断点, 当 uMsg 为 WM_INT 中断, 这样看下执行流程是否是预想的. 有问题的话, 再根据具体问题解决.
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
.if ax == ID_START_BUTTON;
shr eax,16
.if ax == BN_CLICKED;点击"start"button
invoke pcicard_intopen,hInstance,WM_INT ;打开实验板,函数是DLL提供的
;具体引起WM_INT是点击实验板的按钮,消息更改是在DLL函数中体现的,。asm中不能看出
.if eax ==NULL
invoke MessageBox,NULL ,addr PcicardIntNotOpen,addr AppName,MB_OK
.endif
.endif
.endif
响应消息WM_INT的处理函数
OnIntMessage proc hWin:DWORD
inc Count
invoke SetDlgItemInt, hWin ,ID_EDIT,testint,FALSE
;更新编辑框
OnIntMessage endp
现在不知道怎么捕获WM_INT
zara 2006-05-23
  • 打赏
  • 举报
回复
可以说下你具体的使用自定义消息的场合, 要不给些相关的代码?
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
zara能不能说的再清楚一点,我不太理解。
zara 2006-05-23
  • 打赏
  • 举报
回复
不客气的, QQ: 25484385 (zara)
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
大侠有没有man或者qq之类的,留个通讯方式,感谢大侠一直的帮助
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
我就用ml 。。link。。。命令生成具有调试信息的程序,然后在VC下打开,但是不论在哪设置断点都没用。用的createwindow的函数,而且我觉得你上面写的与WM_COMMAND平行处理应该是很正确的。这个程序有VC的版本而且能够运行的很好,但是改成WIN32汇编后就运行不起来。
zara 2006-05-23
  • 打赏
  • 举报
回复
用的什么调试程序, 怎么会不起作用呢? 如果是 CreateWindow 或 CreateDialog 类函数创建的窗口, 自己有消息循环 GetMessage 的; 如果是 DialogBox 类函数, 消息循环是系统内部的, 用户程序一般不好干预. 我觉得还是想想问题最可能出在哪里, 设置断点进行检查
zara 2006-05-23
  • 打赏
  • 举报
回复
首先要确定窗口处理例程对应于正确的窗口; 其次, 那个窗口确实是发出了这样的义消息
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
调试程序的时候在任何地方加入断点都说没用,程序从开始运行,而且还运行不到自己想 要的断点
zara 2006-05-23
  • 打赏
  • 举报
回复
不需要另外添加语句吧, 就在 .dll 中的那个 PostMessage 上加个断点, 看看发送到的窗口句柄和消息号是否是你的那个对话框的窗口句柄和 WM_INT 就可以了
aroky_zxc 2006-05-23
  • 打赏
  • 举报
回复
zara,我想用GetMessage,或者PeekMessage函数来捕捉该WM_INT,查看了DLL中的触发消息是用的PostMessage函数。但是不知道把这个捕捉函数加在程序的哪个地方?
zara 2006-05-23
  • 打赏
  • 举报
回复
那就是并没有消息发过来. 可以在发消息的 .dll 文件的相关指令上设断点, 看看发送的目标窗口和消息号, 是否和这边的一致
aroky_zxc 2006-05-22
  • 打赏
  • 举报
回复
发现这样在WndProc中.if uMsg ==MyMessage 得到捕获消息不行啊?有没有其它办法?
aroky_zxc 2006-05-22
  • 打赏
  • 举报
回复
谢谢zara.
zara 2006-05-22
  • 打赏
  • 举报
回复
就是你在顶楼中的方法, 在其窗口例程中截获消息然后调用相应的处理代码
aroky_zxc 2006-05-21
  • 打赏
  • 举报
回复
忘问了,怎么把MyMessage和MyMessagProc挂钩起来
zara 2006-05-21
  • 打赏
  • 举报
回复
WM_USER 可以直接使用的. 只要在程序前面, 或者是在其包含文件 .inc 中, 定义下就可以象内置消息一样处理使用自定义消息了: MyMessage = WM_USER+100

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧