如题,基于对话框的程序,本来想利用CRect::PtInRect()来监测鼠标位置,用GetClentRect()得到了客户区Rect(),然后在OnMouseMove()中用if(!rect.PtInRect(point))来监测,但是不行。我觉得好像是当鼠标移出程序窗口后,就不能向程序发消息了,所以if(!rect.PtInRect(point)){}中的语句不可能执行到。如果用了程序一起来就用SetCapture(),程序运行中可能有别的地方也需要鼠标消息。所以这方法似乎不可行。在MSDN上查到有一个WM_MOUSELEAVE的消息,但也知道怎么用。应该怎么样才可以知道鼠标移出了程序窗口呢?
解决方案 »
- MFC DLL项目的自动化//调用语法为什么对象即可用点调用,又可用箭头调用呢?
- 奇怪的变量类型问题
- 如何在列表框里显示滑动按扭,并能按一般的滑动按扭使用.
- 菜鸟的入门问题:如何使用单选框
- 我想读人家的程序,MFCVC6。0的。晕死了。从哪里看起啊?
- 怎样对Radio button进行分组呢??????
- 为什么SetIcon两次?
- CAnimateCtrl的奇怪问题
- 请问如何?
- 这样的系统如何制作安装软件?
- 连接http服务器下载一个文件只能用SOCK_STREAM 基于无连接的udp可以做吗?怎么做?
- 求助!SDK中能不能让List View Control每行(Item),甚至每行的列(subItem)显示不同的颜色?
//设置一个状态量用于记录和标识鼠标是否在窗口内
//BOOLm_bMouseTracking;//处理鼠标移动消息
voidCSomeWnd::OnMouseMove(UINTnFlags,CPointpoint)
{
//接收到WM_MOUSEMOVE,而m_bMouseTracking为假时,鼠标进入窗口。
//设置_TrackMouseEvent
if(!m_bMouseTracking)
{
TRACKMOUSEEVENTtme;
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_msgLRESULTOnMouseLeave(WPARAMwParam,LPARAMlParam);//消息映射
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)//处理函数定义
LRESULTCSomeWnd::OnMouseLeave(WPARAMwParam,LPARAMlParam)
{
//
//其他鼠标离开时的操作
////重置状态量
m_bMouseTracking=FALSE;
returnTRUE;
}