触摸屏 触摸操作 鼠标点击事件

来源:互联网 发布:uiautomator2.0源码 编辑:程序博客网 时间:2024/06/10 04:30

环境:window

语言:C++

触摸屏 触摸操作实现。通过鼠标左键或者右键点击事件,获取首尾点坐标(down时获取首点坐标,up时获取尾点坐标),计算x、y距离差值。根据差值判断移动方向。

代码:

1.在PreTranslateMessage()中,预先对消息事件进行处理。 m_bLeftButtonDown为鼠标左键Down标志位,用于记录鼠标左键是否点击,在右键Up信息中,只有此标志位为真,才记录鼠标左键Up信息(尾点)。

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类if(WM_LBUTTONDOWN== pMsg->message){ if (m_bLeftButtonDown==FALSE){int xPos = LOWORD(pMsg->lParam);int yPos = HIWORD(pMsg->lParam);m_LastPoint.x=xPos;m_LastPoint.y=yPos;::ClientToScreen(pMsg->hwnd,&m_LastPoint);m_bLeftButtonDown=TRUE;}}else if (WM_LBUTTONUP==pMsg->message){ if (m_bLeftButtonDown) {int xPos = LOWORD(pMsg->lParam);int yPos = HIWORD(pMsg->lParam);m_CrrentPoint.x=xPos;m_CrrentPoint.y=yPos;::ClientToScreen(pMsg->hwnd,&m_CrrentPoint);m_bLeftButtonDown=FALSE;CreateDirectMessage();}}return CDialogEx::PreTranslateMessage(pMsg);}


2. 在CreateDirectMessage()函数中进行首尾点坐标计算,通过两点差值判断移动方向,函数返回值为int类型 。可通过此值调用后续的向上滑动、向下滑动、向左滑动、向右滑动的事件函数(SendUpMessage(),SendDownMessage(),SendLeftMessage(),SendRightMessage())。 函数中设定当鼠标down ,up首尾点差值大于30时判定调用滑动事件(即x,y移动距离大于30才判定为滑动事件,否者为点击事件)。


int CMyDlg::CreateDirectMessage(){int iWidh=m_LastPoint.x-m_CrrentPoint.x;int iHei=m_LastPoint.y-m_CrrentPoint.y;if (abs(iHei)>abs(iWidh)){if (iHei>30){SendUpMessage();return 1;}else if(iHei<-30){SendDownMessage();return 2;}else{return 0;}}else {if (iWidh>30){SendLeftMessage();return 3;}else if(iWidh<-30){SendRightMessage();return 4;}else{return 0;}}}



1 0