当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]通过鼠标动作来发出命令的程序

  在一些比较不错的浏览器中,出现了一些新的功能,通过鼠标动作(也称鼠标手势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) && x>0)

  *Direction = RBUT_RIGHT;

  else if(abs(x)>abs(y) && x<0)

  *Direction = RBUT_LEFT;

  else if(y>abs(x) && y>0)

  *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;

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

(全球TMT2022年10月18日讯)GNSS数据服务领域企业Rx Networks, Inc宣布,在第一代骁龙8移动平台和骁龙888 5G移动平台上提供TruePoint.io精确定位服务。TruePoint.io的...

关键字: 高通 NETWORKS POINT 智能手机

近日,沈阳京东MALL涌进大批玩家,大部分都为此前在“沈阳京东MALL”微信公众号获得线下首发购买机会的朋友。据悉,此次GeForce RTX 4090显卡现货线下首发活动,受到众多玩家热烈追捧。...

关键字: GE FORCE 显卡 NVIDIA

艾伯森(Albertsons)正在与其竞争对手克罗格(Kroger) 就合并进行谈判。两家连锁杂货店最早可能于本周达成协议。(全球企业动态)...

关键字: GE

通用电气公司(GE)周二表示,其医疗健康部门分拆的新公司将名为GE HealthCare,由四个业务部门组成——成像、超声波、病人护理解决方案和医药诊断。通用电气计划创设三个独立运作的上市公司,分别专注于医疗健康、航空和...

关键字: HEALTH 通用电气 HC GE

今天晚上21点,RTX 4090公版将在国内首发,在这个关键时刻,NVIDIA也是再次提醒大家,不要忘记。除了线上发售外,10月15日GeForce RTX 4090系列显卡将在线下正式开售,华硕、七彩虹、微星推出现货,...

关键字: NVIDIA FORCE 显卡 GE

法拉第未来(Faraday Future,FFIE)提交8K公告,宣布FFIE执行董事长兼董事Sue Swenson,董事Scott Vogel和Jordan Vogel,已正式辞去FFIE董事会董事和公司其他全部相关职...

关键字: 法拉第未来 GE ADAM FARADAY

默沙东(MSD)和国药集团联合宣布,双方签署合作框架协议,默沙东将其和Ridgeback公司合作研发的抗新冠病毒口服药物莫诺拉韦的经销权和独家进口权授予国药集团,同时双方将评估技术转让的可行性,以便该药物在中国境内生产、...

关键字: SD GE CK AC

(全球TMT2022年9月27日讯)Jabra推出Jabra Engage 50II及Engage 40两款全新联络中心耳麦。Jabra Engage 50 II采用了先进算法来检测用户语音波形及分析背景噪声。配备的3...

关键字: GE 耳机 噪声 麦克风

打造更高的通话效率和客服评分 Jabra Engage 50 II 配备协同工作的强大 3 麦克风系统,可提供更清晰的语音和出色的背景噪声消除功能 Jabra Engage 40 凭借清晰语音以及超...

关键字: GE BSP 耳机 麦克风

(全球TMT2022年9月21日讯)iGame推出最为新潮的GeForce RTX 40系列高端显卡装备,本次Vulcan及Neptune等系列家族新品都将登场,包含GeForce RTX 4090及GeForce R...

关键字: 华为 显卡 七彩虹 GE

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭