默认情况下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消息相关推荐

  1. Win32汇编获取和设置文本框的内容

    看一下Win32汇编如何获取和设置文本框的内容: 资源文件如下: #include <resource.h>#define ICO_MAIN 0x1000 //图标 #define DLG ...

  2. win32汇编获取当前进程ID和可执行文件名

    .386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc includelib user32.l ...

  3. C指针原理(23)-win32汇编及.NET调试

    2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS ...

  4. win32 汇编基础概念整理

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

  5. win32汇编基础概念

    一.关于寄存器 寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中会默认使用它,其它情况很少使用到,暂时可以不用理会. EAX是 ...

  6. 【win32汇编】0x04 第一个窗口程序

    第一个win32汇编窗口程序,主要来自 win32汇编语言程序设计,然后加上了自己查阅msdn文档的一些理解,基本过程: start入口地址 --> _WinMain主函数 --> 定义一 ...

  7. 【Win32汇编】学习Win32汇编

    学习Win32汇编(Windows下的32位汇编) 第一个程序Hello world 控制台输出(新建Console App工程) Debug输出(新建Win32 App工程) 后面代码的头文件在这里 ...

  8. 新版WIN32汇编开发环境介绍及RadAsm简明教程

    写在前面的话: 在准备做教程的时候去查资料,关于WIN32下汇编方面的,本来想找些现成的拿到教程里用下,但发现貌似只有一篇,是2005年时jhkdiy写的,而且翻来翻去发现所有图片也都失效了.所以准备 ...

  9. Win32汇编学习——windows汇编语法(小甲鱼教程)

    Win32汇编学习--windows汇编语法(小甲鱼教程) 1)指令集 .386 语句是汇编语句的伪指令,类似指令有:.8086 . .186  ..286  ..386/.386p  . .486/ ...

最新文章

  1. EhCache的特性
  2. 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?
  3. 关于css选择器的问题 + * ~这三个有什么区别
  4. c++ socket 结构体
  5. Python中最常用十大图像处理库详细介绍
  6. [云炬创业管理笔记]第十章商业计划书答辩测试2
  7. 倒数日怎么设置起始日_起始价131亿!杭州江河汇流区85万方综合体招标延期
  8. HDOJ 1428 漫步校园
  9. c#补充print(多态性问题)【C#】
  10. 机器人军团【动态规划】
  11. 关于 OutOfMemoryError 的总结与解决方法
  12. linux内核驱动之 用户空间和内核空间
  13. CSDN Markdown帮助文档
  14. 从拉格朗日插值法到范德蒙行列式
  15. linux系统构建学习笔记
  16. BUUCTF WEB DROPBOX
  17. PHP正确的使用复数
  18. uniapp树组件优化 树节点设置单选,单击单选框可以选中多个 偶尔根节点点击后会隐藏整棵树
  19. html5 霸刀,基于Html5技术研发3D页游《霸刀》3月28日首测
  20. TLP:一个可以延长 Linux 笔记本电池寿命的高级电源管理工具

热门文章

  1. 基于Python的简单蒙特卡洛算法
  2. [内附完整源码和文档] 基于Java面向对象开发的房屋中介管理系统
  3. list集合删除最后一个元素
  4. CSS响应式布局(自适应布局)
  5. 850pro测试软件,三星850Pro系列SSD介绍
  6. Linux—CRLF/CR/LF等回车换行符问题详解
  7. 【小知识】换行符和回车换行符有什么区别
  8. 前端文章收集(长期更新)2020-02-04
  9. ubuntu消除登录痕迹
  10. 应用与系统稳定性第一篇---ANR问题分析的一般套路