QQ登录

只需一步,快速开始

244上位机VC MFC实现鼠标位置获取及鼠标操作模拟常用功能

[ 复制链接 ]

244上位机VC MFC实现鼠标位置获取及鼠标操作模拟常用功能

244上位机VC MFC实现鼠标位置获取及鼠标操作模拟常用功能
244上位机VC MFC实现鼠标位置获取及鼠标操作模拟常用功能
功能展示
鼠标是用户与我们编写好的上位机程序交互的常用工具,因此程序对鼠标的状态获取也会是一种常用的功能,我们当前例程实现鼠标当前位置获取,鼠标左右键切换,鼠标模拟用户操作,鼠标移动与双击范围等与鼠标相关常用的功能,效果如图;
要点提示
我们当前例程实现与鼠标相关的常用的小功能。
一.其中鼠标左右键交换可以用函数SwapMouseButton()函数跟随一BOOL类型参数,为TRUE执行鼠标左右键交换,为FALSE恢复左右的交换;
二.鼠标各种操作的模拟可以用函数mouse_event(); 函数原型为
VOID mouse_event(DWORD dwFlags,  DWORD dx, DWORD dy,  DWORD dwData,ULONG_PTR dwExtraInfo  );
参数说明:
1.dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:
MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分:
MOUSEEVENTF_MOVE:表明发生移动。
MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOUSEEVENTF_WHEEL:在WindowsNT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出
2.dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。
3.dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。
4.dwData:如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。
dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息。
实现功能
1.新建基于对话框的应用程序
2.拖拽按钮<检测鼠标有/无安装><检测鼠标支持按键个数><检测鼠标是否有滚轮><检测鼠标左右键交换><执行鼠标左右键交换><模仿鼠标点击标题栏>检测鼠标位置<检测鼠标移动范围><检测鼠标双击范围><检测鼠标双击响应速度>关联函数
  1. void CGkbc8Dlg::OnButton1() //检测鼠标有/无安装
  2. {
  3.         if(::GetSystemMetrics(SM_MOUSEPRESENT))
  4.                 MessageBox("系统已经安装鼠标","信息提示",MB_OK);
  5.         else
  6.                 MessageBox("系统没有安装鼠标","信息提示",MB_OK);
  7. }
  8. void CGkbc8Dlg::OnButton2() //检测鼠标按键个数
  9. {
  10.         CString sNum;
  11.         sNum.Format("鼠标支持有:%d 个键",GetSystemMetrics(SM_CMOUSEBUTTONS));
  12.         MessageBox(sNum,"信息提示",MB_OK);        
  13. }
  14. void CGkbc8Dlg::OnButton3() //检测鼠标是否有滚轮
  15. {
  16.         if(::GetSystemMetrics(SM_MOUSEWHEELPRESENT))
  17.                 MessageBox("鼠标安装有滚轮","信息提示",MB_OK);
  18.         else
  19.                 MessageBox("鼠标没有安装滚轮","信息提示",MB_OK);        
  20. }
  21. void CGkbc8Dlg::OnButton7() //获取鼠标位置
  22. {        
  23.         SetTimer(5,500,NULL);
  24. }
复制代码
  1. void CGkbc8Dlg::OnButton4() //检测鼠标左右键交换
  2. {
  3.         if(::GetSystemMetrics(SM_SWAPBUTTON))
  4.                 MessageBox("鼠标左右键已经交换","信息提示",MB_OK);
  5.         else
  6.                 MessageBox("鼠标左右键没有交换","信息提示",MB_OK);        
  7. }
  8. void CGkbc8Dlg::OnButton5() //执行鼠标左右键交换
  9. {
  10.         if(::GetSystemMetrics(SM_SWAPBUTTON))
  11.                 SwapMouseButton(FALSE);
  12.         else
  13.                 SwapMouseButton(TRUE);
  14. }
  15. void CGkbc8Dlg::OnButton6() //模仿鼠标点击标题栏
  16. {        
  17.         SetTimer(1,500,NULL);//延时模拟鼠标操作
  18. }
  19. void CGkbc8Dlg::OnButton8() //检测鼠标移动范围
  20. {
  21.                 CRect Rect;
  22.                 GetClipCursor(&Rect);         
  23.                 CString sText;
  24.                 sText.Format("鼠标活动范围在:CRect(%d,%d,%d,%d)",Rect.TopLeft().x,Rect.TopLeft().y,
  25.                         Rect.BottomRight().x,Rect.BottomRight().y);
  26.                 MessageBox(sText,"信息提示",MB_OK);
  27. }
  28. void CGkbc8Dlg::OnButton9() //检测鼠标双击范围
  29. {
  30.         CString sArea;
  31.         sArea.Format("鼠标双击响应范围为:%d * %d",GetSystemMetrics(SM_CXDOUBLECLK),GetSystemMetrics(SM_CYDOUBLECLK));
  32.         MessageBox(sArea,"信息提示",MB_OK);        
  33. }
  34. void CGkbc8Dlg::OnButton10()
  35. {
  36.         SetDoubleClickTime(520);//设置鼠标双击响应速度
  37.         CString sDoubleTime;
  38.         sDoubleTime.Format("当前鼠标双击响应速度为:%d",GetDoubleClickTime());
  39.         MessageBox(sDoubleTime,"信息提示",MB_OK);
  40. }
复制代码
3.添加定时器函数:并在stdafx.h头文件顶部提升窗口版本 #define WINVER 0x0500
  1. void CGkbc8Dlg::OnTimer(UINT nIDEvent)
  2. {        
  3.         if(1==nIDEvent)
  4.         {
  5.                 KillTimer(1);
  6.                 CRect rc;
  7.                 GetWindowRect(&rc);
  8.                 SetCursorPos(rc.left+50, rc.top +10);
  9.                 SetTimer(2,500,NULL);
  10.         }
  11.         if(2==nIDEvent)
  12.         {
  13.                 KillTimer(2);
  14.                 mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);//模拟鼠标右键按下
  15.                 mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);//模拟鼠标右键放开
  16.                 SetTimer(3,500,NULL);
  17.         }
  18.         if(3==nIDEvent)
  19.         {
  20.                 KillTimer(3);
  21.                 mouse_event(MOUSEEVENTF_MOVE,20,40,0,0);
  22.                 SetTimer(4,500,NULL);
  23.         }
  24.         if(4==nIDEvent)
  25.         {
  26.                 KillTimer(4);
  27.                 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  28.                 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
  29.         }
  30.         if(5==nIDEvent)//鼠标位置获取
  31.         {
  32.                 CPoint pt;
  33.                 GetCursorPos(&pt);
  34.                 CString sMousePos;
  35.                 sMousePos.Format("鼠标当前位置:X=%d,Y=%d",pt.x,pt.y);
  36.                 SetDlgItemText(IDC_BUTTON7,sMousePos);
  37.         }
  38.         CDialog::OnTimer(nIDEvent);
  39. }
复制代码
我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:244.上位机VC MFC实现鼠标位置获取及鼠标操作模拟常用功能.zip 
文件大小:139.57 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索