环境: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);
}
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;
}
}
}