请问如何在自己写的button类里面判断鼠标是否离开了button对象?
BOOL CZSM_Button::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_MOUSELEAVE)
m_bMouseOn=FALSE;
return CButton::PreTranslateMessage(pMsg);
}
我在这里拦截不到WM_MOUSELEAVE消息, 谢谢
解决方案 »
- 新手求助 - 初始化结构体变量
- 帮忙看看这个时钟程序
- 一个错误
- CFile如何将所需文件写入临时文件如temp.jpg,并将临时文件写入数据库?
- 如何将一个文件复制到另一个目录中去
- 我现在开始看Visual C++技术内幕 第四版 清华大学出版社 (原著:David J. Kruglinski)
- 一个ListBox的问题
- 请问哪儿有inside com(COM技术内幕)一书的例子源码下载?急
- 利用GDI+做动态的电子相册,照片转换的渐变特效有好的代码分享吗
- WSARECV为什么不能接收到数据包了?
- 如何在工具条中加入自己的checkbox呢?难看是难看了点,但我想知道如何实现,谢谢了。
- 问题解决请 WindsonZhL(风之子),ylredsun(我不聪明),icenl(成冈) 进来另分
BOOL TrackMouseEvent(
LPTRACKMOUSEEVENT lpEventTrack // tracking information
);
这个API先
参数:
typedef struct tagTRACKMOUSEEVENT {
DWORD cbSize; //结构大小
DWORD dwFlags; //设定为TME_LEAVE
HWND hwndTrack; //要跟踪鼠标的窗口句柄
DWORD dwHoverTime;} TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
调用该函数可以在鼠标离开指定窗口时收到WM_MOUSELEAVE消息。添加成员变量:m_bOver ,初始化为FALSE。m_bOver=true用来表示鼠标在按钮区域。
添加WM_MOUSEMOVE消息处理函数:void CButtonXp::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bOver ==FALSE)
{
//鼠标在按钮之上
m_bOver =TRUE; //按钮重绘
InvalidateRect(NULL,FALSE); //跟踪鼠标
//当鼠标离开按钮区域会收到WM_MOUSELEAVE,该消息直接调用OnMouseOut()
TRACKMOUSEEVENT tme;
tme.cbSize =sizeof(TRACKMOUSEEVENT);
tme.dwFlags =TME_LEAVE;
tme.dwHoverTime=0;
tme.hwndTrack =m_hWnd;
::TrackMouseEvent(&tme);
}
CButton::OnMouseMove(nFlags, point);
}
再添加一成员函数OnMouseOut(),
并在BEGIN_MESSAGE_MAP(CButtonXp, CButton)和END_MESSAGE_MAP()之间添加
宏 ON_MESSAGE(WM_MOUSELEAVE,OnMouseOut)
在OnMouseOut()中写入以下代码void CButtonXp::OnMouseOut ()
{
//鼠标已离开按钮区域
m_bOver =FALSE; //重绘按钮
InvalidateRect(NULL,FALSE);
}
不知是什么原因,请xuanzg(小钢娃) 指教,谢谢