WM_MOUSEHOVER 和 WM_MOUSELEAVE

2024-06-08 02:38
文章标签 wm mouseleave mousehover

本文主要是介绍WM_MOUSEHOVER 和 WM_MOUSELEAVE,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来源: http://www.68idc.cn/help/buildlang/ask/20150718452155.html

1.建立MFC程序2.添加按钮,IDC_BUTTON13.添加类,直接右键控件时无法添加CButton的派生类的,如果想添加的话,只能选中项目根,右键添加类,MFC类--MFC类向导--

1.建立MFC程序

2.添加按钮,IDC_BUTTON1

3.添加类,直接右键控件时无法添加CButton的派生类的,如果想添加的话,只能选中项目根,右键添加类,MFC类-->MFC类向导-->选择继承CButton。

4.添加变量,选中按钮,,右键添加变量,mbt1,类型为CBtn//没有这个变量是不行的,我试了n次都没有成功,缺少这个没有反应

5.打开类向导,在类CBtn下添加消息OnMouseHover、OnMouseMove和OnMouseLeave

6.在btn.h中public下添加bool m_bTracking;

在btn.cpp中在类的构造函数中添加m_bTracking=0;//初始化,添加的消息对应如下,实现的功能是当光标在按钮上悬停1后打开网页:

void CBtn::OnMouseHover(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
    ShellExecute(0, NULL, _T(""), NULL, NULL, SW_NORMAL);
    m_bTracking = false;
CButton::OnMouseHover(nFlags, point);
}

void CBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (!m_bTracking)
    {
        TRACKMOUSEEVENT tme;
        tme.cbSize = sizeof(TRACKMOUSEEVENT);
        tme.dwFlags =TME_HOVER;//要触发的消息
        tme.hwndTrack = this->m_hWnd;
        tme.dwHoverTime = 1000;// 若不设此参数,则无法触发mouseHover
        if (::_TrackMouseEvent(&tme)) //MOUSELEAVE|MOUSEHOVER消息由此函数触发
        {
//::_TrackMouseEvent(&tme);
            m_bTracking = true;   
       }
    }
CButton::OnMouseMove(nFlags, point);
}

void CBtn::OnMouseLeave()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_bTracking = false;
CButton::OnMouseLeave();
}


也可以参考:OnMouseHover()和OnMouseLeave()(让窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息)



这篇关于WM_MOUSEHOVER 和 WM_MOUSELEAVE的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040999

相关文章

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

SendMessage和 PostMessage; 使用PostMessage(WM_QUIT)退出程序时导致的内存泄漏问题

引言:我们要使用代码关闭程序的话,应该向窗口发送WM_CLOSE或者直接调DestroyWindow(HWND)函数   (默认情况下WM_CLOSE的消息响应就是调用DestroyWindow(HWND)   函数,所以我们直接调用也达到一样的效果).这样可以令操作系统回收窗口占用着的内存资源后再退出程序. 千万不要直接用PostMessage(WM_QUIT);令程序退出,这样程序是可以退出

SAP LE学习笔记07 - MM与WM跨模块收货到仓库的流程中 如何实现 先上架再入库

上一章讲了LE中收货的一些特殊情况: 1,MM模块收货时,特别移动指标来标识的物料直接产生TO 2,MM中直接收货到仓库的固定Storage Bin(棚番)上 SAP LE学习笔记06 - MM与WM跨模块收货到仓库的流程中 带特别移动指标的物料也可以直接生成TO;MM中收货之后如何直接收到固定棚番(Storage Bin)上_sapwm和mm-CSDN博客 本章继续讲LE-WM中的其

x11 simple-wm-hints

窗口的标识设置样例。 得到 icon 的图片 /* load the given bitmap data and create an X pixmap contianing it. */icon_pixmap = XCreateBitmapFromData(display,win,icon_bitmap_bits,icon_bitmap_width,icon_bitmap_height

oracle wm_concat函数,用于列转行,逗号分隔

oracle wm_concat函数,用于列转行,逗号分隔     首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据   SQL> create table test(id number,name varchar2(20)); SQL> insert into test

关于WM_COPYDATA的使用总结

windows进程间通信的方法有很多,详细请查看:https://www.cnblogs.com/findumars/p/6329593.html。 本人最近在项目中使用了WM_COPYDATA来作为进程间通信的方式,于是就有了这篇总结博客。 首先,关于WM_COPYDATA的介绍可以查看:https://docs.microsoft.com/zh-cn/windows/win32/datax

layer弹出框覆盖在触发mouseenter 和 mouseleave事件元素上的一种解决方法

问题描述: 需求是在table中有告警数据,当鼠标移动到告警数据上,弹出该告警数据关联的信息(关联数据也是表格形式),移开鼠标时,弹出框关闭。 但是在关闭时有这种情况,当弹出框在告警数据的上层时,移动鼠标,先触发mouseleave事件,关闭弹出框,由于弹出框关闭,鼠标回到告警数据上,又弹出,一直循环。 目前能想到的解决方案是:在触发mouseleave事件时,判断鼠标位置,

c#中将WM_CLOSE消息发送到没有窗口的进程的方法

开始一个过程-   ProcessStartInfo psi = new ProcessStartInfo("G:\SampleWinApp.exe"); psi.UseShellExecute = false;psi.CreateNoWindow = true; Process prcs = Process.Start(psi);复制代码 使

WM_Paint 消息疑问解析

1. 系统何时发送WM_PAINT消息?    系统会在多个不同的时机发送 WM_PAINT 消息:当第一次创建一个窗口时,当改变窗口的大小时,当把窗口从另一个 窗口背后移出时,当最大化或最小化窗口时,等等,这些动作都是由 系统管理的,应用只是被动地接收该消息,在消息处理函数中进行绘制操作;大多数的时候应用也需要能够主动引发窗口中的绘制操作,比如当窗口显示的数据改变 的时候,这一般是通过 Inv

C#截获其它窗口的WM_PAINT 消息

在C#底下如何截获其它窗口的WM_PAINT 消息啊? 自己窗口可以这样截获 protected override void WndProc( ref Message m ) { switch(m.Msg) { case WM_PAINT: { } }