找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2006|回复: 18

[求助] C# 双击反应器 怎么屏蔽天正自身事件响应

[复制链接]

已领礼包: 57个

财富等级: 招财进宝

发表于 2021-4-12 10:55:59 | 显示全部楼层 |阅读模式
悬赏80D豆已解决
如题,例如天正单行文字双击会弹出编辑框,天正多行文字双击会弹出对话框。我想自己写一个另外的响应事件,来替代它本身的响应。
像CAD自身的文字,双击会有ddedit命令出现,可以屏蔽ddedit,再写自己的响应,但是不知道天正的怎么弄。
请问有什么方式可以屏蔽他自身的响应呢?
截图.png

最佳答案

查看完整内容

完整版源码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-4-12 10:56:00 | 显示全部楼层
完整版源码
QQ截图20210713160037.jpg

DoubleClick.rar

272.38 KB, 下载次数: 9, 下载积分: D豆 -1 , 活跃度 1

点评

很好用,谢谢分享。之前也想过用钩子,就是怕这类系统全局的东西把握不准确出问题就难受了 所以一直也没花时间去试一下,只能用CAD文字实现了双击。  详情 回复 发表于 2021-7-16 11:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-4-13 09:46:18 | 显示全部楼层
自顶一下 有没有大佬解惑!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 375个

财富等级: 日进斗金

发表于 2021-4-13 10:08:39 | 显示全部楼层
等待大佬来解决,遇到同样的需求了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-4-14 10:05:06 | 显示全部楼层
每日一顶,没有例子,提供点思路也行!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-4-15 10:01:03 | 显示全部楼层
走过路过!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-4-16 14:04:52 | 显示全部楼层
临近周末,最后一顶!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 104个

财富等级: 日进斗金

发表于 2021-4-19 21:53:51 | 显示全部楼层
不晓得,天正没有公开吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-7-12 11:55:33 | 显示全部楼层
用钩子函数,下一个鼠标钩子,钩子类型为7;
测试效果见图
QQ截图20210712115352.jpg
20000.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-7-12 11:58:03 | 显示全部楼层
感觉如果用消息钩子 或者PreTranslateMessage会被天正先拦截
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-7-12 12:00:27 | 显示全部楼层
本帖最后由 brainstorm 于 2021-7-12 12:01 编辑

用鼠标钩子,钩子类型代码是7,可以拦截到,return 1返回,callnexthook可以继续下一个钩子,看需求
用钩子函数,下一个鼠标钩子,钩子类型为7;
测试效果见图
20000.jpg
QQ截图20210712115352.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 58个

财富等级: 招财进宝

发表于 2021-7-13 19:03:44 | 显示全部楼层
改为这样可以了
  1. public class HookProcedures
  2.     {
  3.         #region Data
  4.         Document doc = Application.DocumentManager.MdiActiveDocument;
  5.         Database db = Application.DocumentManager.MdiActiveDocument.Database;
  6.         Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  7.         IntPtr _mousekookPrt;
  8.         public IntPtr MousekookPrt { get => _mousekookPrt; set => _mousekookPrt = value; }
  9.         #endregion

  10.         #region Hook Procedures
  11.         //鼠标钩子
  12.         public int MouseClickProc(int code, IntPtr wParam, IntPtr lParam)
  13.         {
  14.             if (code < 0)
  15.                 return WindowsHook.CallNextHookEx(MousekookPrt, code, wParam, lParam);
  16.             //仅捕获鼠标双击
  17.             if ((Int32)wParam == (int)MouseAction.WM_LBUTTONDBLCLK)
  18.             {
  19.                 MouseHookStruct mStruct = (MouseHookStruct)Marshal.PtrToStructure
  20.                     (lParam, typeof(MouseHookStruct));
  21.                 Point3d pt = ed.PointToWorld(mStruct.point);//屏幕点到世界坐标系
  22.                                                             //ed.WriteMessage("双击" + "\n" +
  23.                                                             //   "坐标:" + pt.ToString());
  24.                                                             //MessageBox.Show("双击" + "\n" +
  25.                                                             //   "坐标:" + pt.ToString());


  26.                 Transaction trans = doc.TransactionManager.StartTransaction();
  27.                 DocumentLock docLock = doc.LockDocument();
  28.                 using (docLock)
  29.                 {
  30.                     using (trans)
  31.                     {
  32.                         PromptSelectionResult psr = ed.SelectImplied();
  33.                         if (psr.Status != PromptStatus.OK)
  34.                             return WindowsHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
  35.                         ObjectId[] ids = psr.Value.GetObjectIds();
  36.                         if (ids.Length == 0)
  37.                             return WindowsHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
  38.                         ObjectId id = ids[0];                        
  39.                         ed.SetImpliedSelection(new ObjectId[0]);

  40.                         try
  41.                         {

  42.                             Entity ent = trans.GetObject(id, OpenMode.ForRead) as Entity;
  43.                             if (ent.GetRXClass().DxfName == "TCH_TEXT")
  44.                             {
  45.                                 ent.UpgradeOpen();
  46.                                 dynamic dynamic = ent.AcadObject;
  47.                                 dynamic.Text = "鼠标双击,文字改为:"  + "坐标:" + pt.ToString();
  48.                             }
  49.                             trans.Commit();
  50.                         }
  51.                         catch (Autodesk.AutoCAD.Runtime.Exception ex)
  52.                         {
  53.                             ed.WriteMessage("\n" + ex.ToString());
  54.                             trans.Abort();
  55.                         }
  56.                     }

  57.                 }
  58.                 //如果 return 1;,拦截天正命令
  59.                 return 1;
  60.                 //继续下一个钩子,天正命令可正常执行
  61.                 //return WindowsHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
  62.             }
  63.             return WindowsHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam);
  64.         }
  65.         #endregion
  66.     }


点评

用钩子的话,还有个问题就是,我选择实体后,双击其他地方也会响应双击事件。 我用了之后,所有实体的双击都被钩子占用了。双击其他实体也没反应。  详情 回复 发表于 2021-7-16 17:30
嗯 要用PickUpFirst 获取选择的对象。  详情 回复 发表于 2021-7-16 11:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-7-16 11:28:24 | 显示全部楼层

很好用,谢谢分享。之前也想过用钩子,就是怕这类系统全局的东西把握不准确出问题就难受了 所以一直也没花时间去试一下,只能用CAD文字实现了双击。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-7-16 11:30:46 | 显示全部楼层

嗯 要用PickUpFirst 获取选择的对象。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 57个

财富等级: 招财进宝

 楼主| 发表于 2021-7-16 17:30:43 | 显示全部楼层

用钩子的话,还有个问题就是,我选择实体后,双击其他地方也会响应双击事件。
我用了之后,所有实体的双击都被钩子占用了。双击其他实体也没反应。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-29 08:12 , Processed in 0.209614 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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