VC编程中的WM_MOUSEENTER 和 WM_MOUSELEAVE消息

这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。

如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加:

添加变量:

BOOL m_bTracking;

m_bTracking = FALSE;

添加消息处理函数:

afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);

afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);

用ON_MESSAGE宏进行消息映射:

ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)

ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)

在WM_MOUSEMOVE消息处理函数中进行处理:

void CDemo::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default

    if (!m_bTracking)
    {
        TRACKMOUSEEVENT tme;
        tme.cbSize = sizeof(tme);
        tme.hwndTrack = m_hWnd;
        tme.dwFlags = TME_LEAVE | TME_HOVER;
        tme.dwHoverTime = 1;
        m_bTracking = _TrackMouseEvent(&tme);
    }

}

LRESULT CDemo::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
    return 0;
}

LRESULT CDemo::OnMouseHover(WPARAM wParam, LPARAM lParam)
{

    return 0;
}

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/vc/

WM_MOUSELEAVE ,WM_MOUSEENTER 应该算是个自定义的消息,因为Windows通常都不会发送这个消息。只有你调用TrackMouseEvent 才会收到这个消息。

实际上这个消息 是 TrackMouseEvent 而不是windows 发出的。很奇怪微软会定义出这样子的API。而且TrackMouseEvent 个人感觉也不大好用(主要是感觉别扭,不是说功能不行)。其实TrackMouseEvent 的原理也蛮简单的,自己三两句语句就搞定了,不必理会微软搞的这个古里古怪的API,还得去查找消息定义。

原理如下:

鼠标在窗口区域时会收到MouseMove消息,第一次收到这个消息时 就是 WM_MOUSEENTER。

On_MouseMove(...)
{
BOOL bFirst = TRUE;
if (bFirst)
{
    // PostMessage(WM_MOUSEENTER...) or call some function.
    bFirst = FALSE;
    SetTimer(...);
}
}

在 Mouse Enter 自后启动了一个计时器, 通常100ms 就足够了。计时器里检测鼠标是否离开。

On_Timer(...)
{
...
GetCursorPos(pt);
GetWindowRect(rect);
if (PtInRect(&rect,pt))
{
    KillTimer(...); // kill self.
    PostMessage(WM_MOUSELEAVE...); // or call some function.
}
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索wm
, 消息
, onmouseleave
, 处理
, vc++ mousemove
, #wm
, LRESULT
, mouseenter
mouseleave
wm mouseleave、mouseleave、mouseout mouseleave、jquery mouseleave、mouseleave事件,以便于您获取更多的相关知识。

时间: 2024-09-12 11:41:20

VC编程中的WM_MOUSEENTER 和 WM_MOUSELEAVE消息的相关文章

VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息

关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息 这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到. 如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加: 添加变量: BOOL m_bTracking; m_bTracking = FALSE; 添加消息处理函数: afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnMou

vc++-VC编程中提取源程序代码应用另一个程序

问题描述 VC编程中提取源程序代码应用另一个程序 请问各位大神,现在我有一段VC二维码识别程序的源代码,如何将其提取并编译成一个新的程序,满足从指定位置访问图片文件,输出识别信息?求指导. 在VC编程环境下实现,谢谢! 解决方案 既然有源代码,那么你要做的就是程序得到输入文件路径,然后传给源码中的函数对应参数,获取函数返回结果,进行处理. 解决方案二: 参考:http://blog.csdn.net/liuyu60305002/article/details/8713399 解决方案三: 有一段

vc++-VC++编程中HICON,这个是图标句柄,想这种带H的都是引用对象的地址的,是吗??

问题描述 VC++编程中HICON,这个是图标句柄,想这种带H的都是引用对象的地址的,是吗?? VC++编程中HICON,这个是图标句柄,想这种带H的**都**是引用对象的地址的,是吗??不会引用其他的吧,句柄只是引用对象的地址吧? 解决方案 局柄的数据结构并没有公开. Windows程序一书中的理解:句柄是一个32位的整数,实际上是windows在内存中维护的一个对象(窗口等)内存物理地址列表的整数索引.因为windows的内存管理经常会将当前空闲对象的内存释放掉,当需要时访问再重新提交到物理

VC编程中如何在界面上实现3D文字

一般情况下,程序开发人员都希望自己的程序美观大方,为了达到这一个要求,想尽办法美化自己的程序,如果在界面上适当的地方添加并显示3D文字,将不失为一个好的选择,可以达到事半功倍的效果,本文针对这一问题,通过一个简单的小程序,介绍如何实现这一目标.有兴趣的读者可以稍加改动,将该方法应用到自己的程序中去. 首先启动VC生成一个新的基于对话框的项目,命名为3Dtext,在对话框中重载OnPaint()函数,具体实现的思想是通过CDC::SetTextColor()分别设置文字的颜色为高亮(3DHILIG

VC编程中如何设置对话框的背景颜色和静态文本颜色

晚上编一个小程序,涉及到如何设置对话框的背景颜色和静态文本颜色.这在VC6.0中本来是一句话就搞定的事.在应用程序类中的InitInstance()函数添加:     //设置对话框背景和文本颜色 SetDialogBkColor(RGB(160,180,220),RGB(0,0,0));   谁知这在VS 2005上竟不起作用,到网上一查,原来SetDialogBkColor函数在VS 2003中就已经不支持了.只得另辟蹊径.另外的办法就是响应WM_CTLCOLOR消息,在消息映射函数中添加:

vc++编程问题-VC加载SkinPlusPlus后CFileDialog的打开对话框重新选取时自动消失

问题描述 VC加载SkinPlusPlus后CFileDialog的打开对话框重新选取时自动消失 在VC编程中,加载了SkinPlusPlus库后,调用InitializeSkin("SoftCrystal.ssk");初始化窗体皮肤,显示一切正常,但是在用CFileDialog Dlg(TRUE)进行DoModal()后,打开对话框出来了,在对路径进行重新选择(比如点击后退按钮!,比如下拉选择C盘或桌面)时,打开对话框就自动消失了,对此本菜鸟很是头疼,搞了好几天都没有弄出来,希望哪位

VB与VC混合编程中处理消息的方法

现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作.IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作. 一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如: Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.d

请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊?

问题描述 请问java图形界面编程中怎样改变消息提示框中确定按钮的文本内容啊? 问题补充:恩恩,swing的!请问怎么改啊?xiaolv 写道 解决方案 JOptionPane.setDefaultLocale(Locale.CHINA);JOptionPane.showMessageDialog(null, "11", "22",JOptionPane.INFORMATION_MESSAGE);这个按钮自动集成多语言.只能通来Locale来改.想要OK就用Loca

Android编程中的消息机制实例详解_Android

本文实例讲述了Android编程中的消息机制.分享给大家供大家参考,具体如下: 在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState)