找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 143|回复: 0

[每日一码] 利用“钩子”实现鼠标功能的例子代码

[复制链接]

1

主题

0

回帖

43

积分

管理员

积分
43
发表于 2024-3-14 20:30:44 | 显示全部楼层 |阅读模式
  1. //函数的声明部分
  2. static BOOL CapsDone = FALSE;   //判断是否注册了该命令
  3. BOOL toCaps(MSG *pMsg);    //获得消息的函数,就是消息处理函数
  4. void regCaps();   //注册命令
  5. void unregCaps();  //注销命令
  6. ///程序实现
  7. void initApp()
  8. {
  9. acedRegCmds->addCommand(采用T("MKEvents"),采用T("caps"),采用T("caps"),ACRX采用CMD采用MODAL,&regCaps);
  10. return;
  11. }
  12. void unloadApp()
  13. {
  14. acedRegCmds->removeGroup(采用T("MKEvents"));
  15. if(CapsDone==TRUE)
  16. {
  17.   acedRemoveFilterWinMsg(toCaps);
  18. }
  19. //  acedRemoveWatchWinMsg(toCaps);
  20. return;
  21. }
  22. //此处获得鼠标在Dwg图纸中的坐标,相当有用,值得珍藏的一段代码
  23. BOOL toCaps(MSG* pMsg)
  24. {
  25. CString sTemp;
  26. long ptx=0,pty=0;
  27. if(pMsg->message == WM采用CHAR)
  28. {
  29.     ptx=LOWORD(pMsg->lParam);
  30.     pty=HIWORD(pMsg->lParam);
  31.     CPoint pt(ptx,pty);
  32.     acedDwgPoint getPts;
  33.     acedCoordFromPixelToWorld(pt,getPts);
  34.     sTemp.Format(采用T("/nx=%0.3f,y=%0.3f/n"),getPts[0],getPts[1]);
  35.     acutPrintf(sTemp);
  36. }
  37. return FALSE;
  38. }
  39. void regCaps()
  40. {
  41. if(CapsDone == TRUE)
  42.   return;
  43. acedPrompt(采用T("/ncapsing.../n"));
  44. if(acedRegisterFilterWinMsg(toCaps) == FALSE)
  45. // if(acedRegisterWatchWinMsg(toCaps) == FALSE)
  46. {
  47.   acedPrompt(采用T("/ncant/n"));
  48. }
  49. else
  50. {
  51.   CapsDone=TRUE;
  52. }
  53. return;
  54. }
  55. void unregCaps()
  56. {
  57. if(CapsDone == TRUE)
  58. {
  59.   acedRemoveFilterWinMsg(toCaps);
  60. //  acedRemoveWatchWinMsg(toCaps);
  61.   CapsDone = FALSE;
  62. }
  63. return;
  64. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2025-1-10 21:33 , Processed in 0.123254 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表