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

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

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

率先上市的新平台利用创新的生成和运营人工智能技术为公司的全套 CPM 解决方案提供动力 纽约2024年5月16日 /美通社/ -- 全球专业信息、软件和服务领先者威科集团今天宣布推出人工智能驱动的C...

关键字: 人工智能 智能驱动 TI GE

德国殷格翰2024年4月16日 /美通社/ -- 今天,研发驱动的全球领先生物制药企业勃林格殷格翰发布了2023年全年业绩表现。公司加速夯实研发管线,重点研发领域的多项关键性临床试验顺利按计划推进。全年研发投入同比增长1...

关键字: 管线 可持续发展 GE TI

国轩德国基地首款电池产品正式下线 下萨克森州州长斯蒂凡·魏尔等中德政府官员共同见证 同期与巴斯夫中国、ABB、Ebusco、Ficosa等多家国际知名企业签约 德国哥廷根2023年9月1...

关键字: 电池 国轩高科 GE AN

(全球TMT2023年9月15日讯)企业移动性管理领域企业42Gears宣布推出AstroStatus,这是一种直观的事件沟通解决方案,旨在增强企业能力,让企业在云托管解决方案出现服务中断和意外故障时能随时向客户通报情...

关键字: STATUS RS OS GE

印度班加罗尔2023 9月15日 /美通社/ -- 企业移动性管理领域的领先企业 42Gears 十分高兴地宣布推出AstroStatus,这是一种直观的事件沟通解...

关键字: STATUS RS OS GE

北京2023年9月11日 /美通社/ -- 近期,国际权威研究机构高德纳(Gartner)发布中国AIOps市场指南报告《Market Guide for AIOps, China》,报告从数据中心运维需求变化...

关键字: 数据中心 智能运维 GE GARTNER

瓦努阿图维拉港2023年8月28日 /美通社/ -- Vantage(或"Vantage Markets")欣然宣布在Vantage应用程序上推...

关键字: GE AN 信号 应用程序

上海2023年8月17日 /美通社/ -- 全球领先的专业信息、软件解决方案和服务供应商威科集团今天宣布,梦饷科技选择了CCH® Tagetik企业绩效管理(CPM)解决方案来应对全面预算管理需求。梦饷科技选择了...

关键字: TI GE 控制 软件

加州卡尔弗城2023年8月16日 /美通社/ -- 蜗牛游戏公司(纳斯达克代码:SNAL)("蜗牛游戏"或"公司"),一家全球领先的独立互动数字娱乐开发商和出版商,今日宣布与近期合...

关键字: VIVO TI RCS GE

加州卡尔弗城2023年8月3日 /美通社/ -- 蜗牛游戏公司(纳斯达克代码:SNAL)("蜗牛游戏"或"公司"),一家全球领先的独立互动数字娱乐开发商和出版商,今日宣布与Wolp...

关键字: TI GE AI STATE
关闭
关闭