欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>杂项>>文章内容
测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
  测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

FMD()

(注:此文曾在CSDN出现过,被他人作为"原作")

测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留

以下给出两种跟踪鼠标是否在窗口内的方法

一、使用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;

}


附件:
    关闭窗口
    打印文档
    账号登录
    保持登录 忘记密码?
    账号与武进教师培训平台同步