Win32汇编获取窗体的mousehover消息
默认情况下Windows窗体是不会响应WM_MOUSELEAVE和WM_MOUSEHOVER消息的,通过使用_TrackMouseEvent这个函数可以激活这两个消息。在调用这个函数后,当鼠标在指定窗口上停留超过一定时间或离开窗口后,该函数会就会发送这两个消息到指定窗口。
为了使窗体追踪鼠标事件,首先需要定义 isMouseTrack变量来标识窗体是否在追踪当前鼠标状态,这样就能避免鼠标已经在窗体之上时,一移动鼠标就不断重复产生WM_MOUSEHOVER。在窗体初始化时将isMouseTrack初始化为0。
_TrackMouseEvent函数需要用到结构体TRACKMOUSEEVENT,该结构体的定义如下:
TRACKMOUSEEVENT structcbSize dword ? ;该结构体的大小dwFlags dword ? ;定义服务请求,可以是TME_CANCEL,TME_LEAVE,TME_HOVER的组合值,;TME_CANCEL用来取消前一次的跟踪请求hwndTrack dword ? ;指定要追踪的窗口dwHoverTime dword ? ;定义hover事件的耗尽时间,单位是毫秒
TRACKMOUSEEVENT ends
在窗体消息处理函数处理WM_MOUSEMOVE事件中调用_TrackMouseEvent函数,并将isMouseTrack中的值修改为1,表示开始追踪鼠标状态。在窗体消息处理函数中添加处理WM_MOUSELEAVE和WM_MOUSEHOVER事件的代码,在处理WM_MOUSELEAVE事件时,将isMouseTrack置为0,表示再次允许追踪鼠标状态。
_ProcWnd proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
local @tME:TRACKMOUSEEVENT
mov eax,uMsg
;*******************************************************************************************
.if eax == WM_MOUSEMOVE
.if isMouseTrack == 0
mov @tME.cbSize,sizeof TRACKMOUSEEVENT
mov @tME.dwFlags,TME_LEAVE
push hWnd
pop @tME.hwndTrack
mov @tME.dwHoverTime,1
invoke _TrackMouseEvent,addr @tME
mov isMouseTrack,1
.endif
;*******************************************************************************************
.elseif eax == WM_MOUSELEAVE
mov isMouseTrack,0
;*******************************************************************************************
.elseif eax == WM_MOUSEHOVER
;do something
;*******************************************************************************************
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcWnd endp
Win32汇编获取窗体的mousehover消息相关推荐
- Win32汇编获取和设置文本框的内容
看一下Win32汇编如何获取和设置文本框的内容: 资源文件如下: #include <resource.h>#define ICO_MAIN 0x1000 //图标 #define DLG ...
- win32汇编获取当前进程ID和可执行文件名
.386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc includelib user32.l ...
- C指针原理(23)-win32汇编及.NET调试
2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...
- win32 汇编基础概念整理
一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...
- win32汇编基础概念
一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...
- 【win32汇编】0x04 第一个窗口程序
第一个win32汇编窗口程序,主要来自 win32汇编语言程序设计,然后加上了自己查阅msdn文档的一些理解,基本过程: start入口地址 --> _WinMain主函数 --> 定义一 ...
- 【Win32汇编】学习Win32汇编
学习Win32汇编(Windows下的32位汇编) 第一个程序Hello world 控制台输出(新建Console App工程) Debug输出(新建Win32 App工程) 后面代码的头文件在这里 ...
- 新版WIN32汇编开发环境介绍及RadAsm简明教程
写在前面的话: 在准备做教程的时候去查资料,关于WIN32下汇编方面的,本来想找些现成的拿到教程里用下,但发现貌似只有一篇,是2005年时jhkdiy写的,而且翻来翻去发现所有图片也都失效了.所以准备 ...
- Win32汇编学习——windows汇编语法(小甲鱼教程)
Win32汇编学习--windows汇编语法(小甲鱼教程) 1)指令集 .386 语句是汇编语句的伪指令,类似指令有:.8086 . .186 ..286 ..386/.386p . .486/ ...
最新文章
- EhCache的特性
- 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
- 关于css选择器的问题 + * ~这三个有什么区别
- c++ socket 结构体
- Python中最常用十大图像处理库详细介绍
- [云炬创业管理笔记]第十章商业计划书答辩测试2
- 倒数日怎么设置起始日_起始价131亿!杭州江河汇流区85万方综合体招标延期
- HDOJ 1428 漫步校园
- c#补充print(多态性问题)【C#】
- 机器人军团【动态规划】
- 关于 OutOfMemoryError 的总结与解决方法
- linux内核驱动之 用户空间和内核空间
- CSDN Markdown帮助文档
- 从拉格朗日插值法到范德蒙行列式
- linux系统构建学习笔记
- BUUCTF WEB DROPBOX
- PHP正确的使用复数
- uniapp树组件优化 树节点设置单选,单击单选框可以选中多个 偶尔根节点点击后会隐藏整棵树
- html5 霸刀,基于Html5技术研发3D页游《霸刀》3月28日首测
- TLP:一个可以延长 Linux 笔记本电池寿命的高级电源管理工具