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

2016-01-29 12:10 51 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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


作者:Bborn

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


下载源代码


在一些比较不错的浏览器中,出现了一些新的功能,通过鼠标动作(也称鼠标手势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.在文档试图程序中是差不多

来源:http://www.tulaoshi.com/n/20160129/1484921.html

延伸阅读
标签: 浏览器
2345智能浏览器鼠标手势设置 具有设置方法: 在菜单工具中选择2345智能浏览器选项,如下图: 图1 打开2345智能浏览器选项后选择鼠标手势选项,可以对手势进行设置。如图2、图3所示: 图2 图3
标签: 浏览器
2345王牌浏览器鼠标手势设置   具有设置方法: 在菜单工具中选择2345王牌浏览器选项,如下图: 图1 打开2345王牌浏览器选项后选择鼠标手势选项,可以对手势进行设置。如图2、图3所示: 图2 图3
标签: 浏览器
360浏览器怎么使用鼠标手势?   打开360安全浏览器,在顶部栏中点击工具,展开菜单列表,选择选项功能。 打开选项设置以后,选择鼠标手势。在鼠标手势中,我们就可以看到不同鼠标手势所实现的功能了,如:手势向上代表向上翻页、手势向下代表向下翻页。 除了默认的功能外,用户还可以点击手势设置实现效果,如:向左...
标签: 浏览器
浏览器鼠标手势使用技巧分享 说到浏览器鼠标手势,想必大家都会联想到脚本。脚本是个什么东西呢?记得曾经问谷歌保的C++学的怎么样,他说现在会写一些类似脚本的东西,虽然不羡慕但是还是有点嫉妒。没办法,本来想去问问百度杨的,但是不在线,只有作罢,自己倒腾吧。 自己动手,丰衣足食,这是我的一贯风格。在使用之前,我第一个想...
标签: 浏览器
360浏览器鼠标手势的使用   今天我们来了解一下360浏览器的鼠标手势: 不知道鼠标手势在哪里看?点工具360浏览器选项即可。 刷新:按住鼠标右键来个漂亮的横竖就是刷新。 后退:轻轻将鼠标向左滑动就可以了,向右就能继续前进。 网页下拉:按住右键向下划个直线就翻到下一页,向上划条直线就回到上一页了。 ...

经验教程

420

收藏

40
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部