登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

判断指针是否在控件内  

2011-12-04 16:37:36|  分类: 标准控件 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
测试鼠标是否在窗口内,以及鼠标的离开 

    以下给出两种跟踪鼠标是否在窗口内的方法 
一、使用SetCapture(),OnMouseMove()等判断鼠标位置 
//设置一个状态量用于记录和标识鼠标是否在窗口内 
//BOOL   m_bOverControl; 

void   C?????::OnMouseMove(UINT   nFlags,   CPoint   point) 

CStatic::OnMouseMove(nFlags,   point); 

//如果鼠标还在窗口内 
if   (m_bOverControl) 

CRect   rect; 
GetClientRect(rect); 
//鼠标位置离开了客户区,解除鼠标捕获,并改写状态量m_bOverControl 
if   (!rect.PtInRect(point)) 

m_bOverControl   =   FALSE; 
ReleaseCapture(); 

//...... 
//其他鼠标离开时的操作 
//eg:   ReDrawWindow(); 

return; 



//如果鼠标进入窗口,置鼠标捕获,状态参量 
else 

m_bOverControl   =   TRUE; 

// 
//其他鼠标进入时的操作 
//eg:   ReDrawWindow(); 

SetCapture(); 




二、使用TrackMouseEvent()在鼠标离开窗口时发送WM_MOUSELEAVE消息 

使用TrackMouseEvent()还可以判断鼠标的停留,并发送WM_MOUSEHOVER消息 
//设置一个状态量用于记录和标识鼠标是否在窗口内 
//BOOL   m_bMouseTracking; 

//处理鼠标移动消息 
void   CSomeWnd::OnMouseMove(UINT   nFlags,   CPoint   point) 

//接收到WM_MOUSEMOVE,而m_bMouseTracking为假时,鼠标进入窗口。 
//设置_TrackMouseEvent 
if   (!m_bMouseTracking) 

TRACKMOUSEEVENT   tme; 
tme.cbSize   =   sizeof(TRACKMOUSEEVENT); 
//监控鼠标离开 
tme.dwFlags   =   TME_LEAVE; 
tme.hwndTrack   =   this-> m_hWnd; 

if   (::_TrackMouseEvent(&tme)) 

m_bMouseTracking   =   TRUE; 

// 
//其他鼠标进入时的操作 
// 



CView::OnMouseMove(nFlags,   point); 


// 
//处理WM_MOUSELEAVE消息 
// 

//消息处理函数声明 
afx_msg   LRESULT   OnMouseLeave(WPARAM   wParam,   LPARAM   lParam); 

//消息映射 
ON_MESSAGE(WM_MOUSELEAVE,   OnMouseLeave) 

//处理函数定义 
LRESULT   CSomeWnd::OnMouseLeave(WPARAM   wParam,   LPARAM   lParam) 

// 
//其他鼠标离开时的操作 
// 

//重置状态量 
m_bMouseTracking   =   FALSE; 
return   TRUE; 
  评论这张
 
阅读(1188)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018