用鼠标手势动作来发送命令

翘尾巴狼V

翘尾巴狼V

2016-01-29 12:10

用鼠标手势动作来发送命令,用鼠标手势动作来发送命令

用鼠标手势动作来发送命令


作者:Bborn

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)


下载源代码


在一些比较不错的浏览器中,出现了一些新的功能,通过鼠标动作(也称鼠标手势Mouse Gestures)来发出一些命令,比如opera,myie2.一般是这样,先按住鼠标右键,不要松,然后画直线或者其他设定的路径,就可以完成指定的命令。下面我们就来实现这个功能,具体的核心代码来自共享软件联盟小树冲浪浏览器中,整理改编了其中的一些地方。


1.建立一个对话框程序,声明以下变量和函数

 BOOL m_bIsCapture;//一个标志变量 char m_MouseGestures[4], m_SeqMG[4];//用来保存鼠标动作的代码U(上) D(下)等.. int m_iMGLen; int m_iMouseGS, m_iMouseGE;  POINT  m_StartPoint;  //鼠标的坐标点 BOOL MoveDirection(CPoint& point, char* Direction); //判断鼠标的简单动作,四个,上下左右 void PushMouseGesture(char gesture);//把鼠标动作的代码保存起来           
2.在对话框中加一个文本框,增加它的CString变量,m_mouse,用来显示鼠标的动作


3.重载OnMouseMove的函数,如下
 if( nFlags == MK_RBUTTON) //判断时候鼠标右键按下 {      if (m_bIsCapture)   //初始的值的TRUE, 只有当第一点的时候发生里面的动作               {         m_bIsCapture=FALSE;            SetCapture(); //捕获鼠标      m_StartPoint = point; //记录初始坐标点              }  char dir;   if(MoveDirection(point, &dir))      //调用函数  {   PushMouseGesture(dir);   m_StartPoint = point;  } }  CDialog::OnMouseMove(nFlags, point);} 
4.判断鼠标动作的函数 (核心),个人认为是很巧妙而且简单的算法:
BOOL Cmouse2Dlg::MoveDirection(CPoint &point, char *Direction){ int x = point.x - m_StartPoint.x; int y = point.y - m_StartPoint.y; int dist = x*x+y*y;          if(dist>64) {  if(x>abs(y) && x0)   *Direction = RBUT_RIGHT;  else if(abs(x)abs(y) && x<0)   *Direction = RBUT_LEFT;  else if(yabs(x) && y0)   *Direction = RBUT_DOWN;  else if(abs(y)abs(x) && y<0)   *Direction = RBUT_UP;   else   return FALSE;  return TRUE; } else  return FALSE;}
5.PushMouseGesture函数

这个函数主要是将鼠标的动作保存到m_MouseGestures中,等以后调用
if(m_iMouseGE!=0 || m_iMouseGS !=0)  //m_iMouseGS和m_iMouseGE初始为0 {  int pre = (m_iMouseGE -1 + m_iMGLen)m_iMGLen;    if(m_MouseGestures[pre] == gesture)   return; } m_MouseGestures[m_iMouseGE] = gesture; m_iMouseGE = (m_iMouseGE+1)m_iMGLen; if(m_iMouseGS == m_iMouseGE)  m_iMouseGS = (m_iMouseGS + 1)m_iMGLen;
6.重载OnRButtonUp函数,这是最后触发的动作,命令处理都在这里
if(!m_bIsCapture)     //看标志变量,是否触发了鼠标动作 { m_bIsCapture=TRUE;  ReleaseCapture();   int i =0; m_SeqMG[0]= '''';  while(m_iMouseGE != m_iMouseGS)   //将鼠标动作保存到m_SeqMG中,并在最后加上  {   m_SeqMG[i] = m_MouseGestures[m_iMouseGS];   i++;   m_SeqMG[i] = '''';   m_iMouseGS = (m_iMouseGS +1)m_iMGLen;    }  if(i>0)          //开始比较鼠标动作,在这里可以加上自定义的动作和命令!  {   if(strcmp(m_SeqMG, "D")==0)     m_mouse="Down";   else if(strcmp(m_SeqMG, "L")==0)     m_mouse="Left";   else if(strcmp(m_SeqMG, "U")==0)     m_mouse="Up";   else if(strcmp(m_SeqMG, "R")==0)     m_mouse="Right";   else if(strcmp(m_SeqMG, "UD")==0)     m_mouse="Up Down";   else if(strcmp(m_SeqMG, "RLR")==0)     m_mouse="Right Left Right";   else if(strcmp(m_SeqMG, "UL")==0)      m_mouse="Up Left";   else if(strcmp(m_SeqMG, "UR")==0)      m_mouse="Up Right";   else {    m_mouse="";    i = 0;       }  } UpdateData(FALSE); }
7.在文档试图程序中是差不多
展开更多 50%)
分享

猜你喜欢

用鼠标手势动作来发送命令

C语言教程 C语言函数
用鼠标手势动作来发送命令

如何发送命令到文档对象

C语言教程 C语言函数
如何发送命令到文档对象

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

鼠标手势怎么用

电脑入门
鼠标手势怎么用

office向程序发送命令时出现错误解决方法

软件教程
office向程序发送命令时出现错误解决方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

win10中打开CAD提示向程序发送命令失败该怎么办?

windows10
win10中打开CAD提示向程序发送命令失败该怎么办?

Win10打不开EXCEL提示向程序发送命令时出现问题

电脑入门
Win10打不开EXCEL提示向程序发送命令时出现问题

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JSP显示中文问题的解决方案

JSP显示中文问题的解决方案

如何更改其它程序 ListView 控件中某个 Item 的内容

如何更改其它程序 ListView 控件中某个 Item 的内容
下拉加载更多内容 ↓