明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8484|回复: 14

[事件] 捕捉AutoCAD的鼠标滚轮事件

  [复制链接]
发表于 2009-12-17 20:52 | 显示全部楼层 |阅读模式
在雪山飞狐兄的指导下,修改了Kean的一个帖子(见http://mjtd.com/bbs/dispbbs.asp?boardid=33&ID=76191 四楼),能在AutoCAD 2009以上版本中捕捉鼠标滚轮事件。
注意:要引用WindowsBase。
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.Runtime;
  3. using System.Windows.Interop;
  4. using System;
  5. namespace PreTranslate
  6. {
  7.     public class Commands
  8.     {
  9.         const int WM_MOUSEWHEEL = 522;
  10.         [CommandMethod("testOn")]
  11.         public void testOn()
  12.         {
  13.             Application.PreTranslateMessage += new PreTranslateMessageEventHandler(Application_PreTranslateMessage);
  14.         }
  15.         void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
  16.         {
  17.             if (e.Message.message == WM_MOUSEWHEEL)
  18.             {
  19.                 System.Windows.Forms.MessageBox.Show("你在CAD操作中转动滚轮了!");
  20.             }
  21.         }
  22.         [CommandMethod("testOff")]
  23.         public void testOff()
  24.         {
  25.             Application.PreTranslateMessage -= new PreTranslateMessageEventHandler(Application_PreTranslateMessage);
  26.         }
  27.     }
  28. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 1威望 +1 明经币 +2 金钱 +20 贡献 +5 激情 +5 收起 理由
雪山飞狐_lzh + 1 + 2 + 20 + 5 + 5 【精华】好文章

查看全部评分

发表于 2020-4-2 11:52 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2009-12-17 20:55 | 显示全部楼层

麻烦高手转成vb.net。

发表于 2009-12-17 21:02 | 显示全部楼层
转成vb.net
  1. Imports Autodesk.AutoCAD.ApplicationServices
  2. Imports Autodesk.AutoCAD.Runtime
  3. Imports System.Windows.Interop
  4. Imports System
  5. Namespace PreTranslate
  6.     Public Class Commands
  7.         Const WM_MOUSEWHEEL As Integer = 522
  8.         <CommandMethod("testOn")> _
  9.         Public Sub testOn()
  10.             AddHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage
  11.         End Sub
  12.         Private Sub Application_PreTranslateMessage(ByVal sender As Object, ByVal e As PreTranslateMessageEventArgs)
  13.             If e.Message.message = WM_MOUSEWHEEL Then
  14.                 System.Windows.Forms.MessageBox.Show("你在CAD操作中转动滚轮了!")
  15.             End If
  16.         End Sub
  17.         <CommandMethod("testOff")> _
  18.         Public Sub testOff()
  19.             RemoveHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage
  20.         End Sub
  21.     End Class
  22. End Namespace

评分

参与人数 1明经币 +1 收起 理由
雪山飞狐_lzh + 1 【好评】表扬一下

查看全部评分

发表于 2009-12-17 21:40 | 显示全部楼层
顶。 一下。收藏了。
发表于 2009-12-23 09:43 | 显示全部楼层

麻烦哪位VB.net高手解释一下这句话的意思是什么?

AddHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage

addhandler应该是添加一个回传,就是是相当于VB中的钩子吧,可能是,但Application是指谁呢,是指.net所做的程序吗?

如果这样的话,是不是在别的窗口中按滑轮,也会有相应的消息弹出来呢?

我以前装了。net,但不会用删了,现在试不了,有时候再试试,也希望高手能做一些解答。

发表于 2009-12-23 10:28 | 显示全部楼层
还有,上述vb.net代码应怎样才能运行?要引用哪一个CAD的类库呢
发表于 2009-12-23 23:45 | 显示全部楼层

Application:AutoCad的Net版本应用程序实例

引用Cad目录下的两个托管Dll:AcDbMgd.dll,AcMgd.dll

上面的功能在2009以上版本可以实现,低版本要用另外的办法

发表于 2009-12-25 08:58 | 显示全部楼层

哦,我在2008上试,在。net编辑器中通不过,错误很多,没有2009以上的cad/

发表于 2011-11-1 11:54 | 显示全部楼层
新手学习了!!
发表于 2011-11-14 11:16 | 显示全部楼层
09版本以下除了用钩子函数以外还有别的办法实现没?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-3-28 18:29 , Processed in 0.257123 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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