ahlzl 发表于 2009-12-17 20:52:00

捕捉AutoCAD的鼠标滚轮事件

在雪山飞狐兄的指导下,修改了Kean的一个帖子(见http://mjtd.com/bbs/dispbbs.asp?boardid=33&ID=76191 四楼),能在AutoCAD 2009以上版本中捕捉鼠标滚轮事件。
注意:要引用WindowsBase。
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using System.Windows.Interop;
using System;
namespace PreTranslate
{
    public class Commands
    {
      const int WM_MOUSEWHEEL = 522;
      
      public void testOn()
      {
            Application.PreTranslateMessage += new PreTranslateMessageEventHandler(Application_PreTranslateMessage);
      }
      void Application_PreTranslateMessage(object sender, PreTranslateMessageEventArgs e)
      {
            if (e.Message.message == WM_MOUSEWHEEL)
            {
                System.Windows.Forms.MessageBox.Show("你在CAD操作中转动滚轮了!");
            }
      }
      
      public void testOff()
      {
            Application.PreTranslateMessage -= new PreTranslateMessageEventHandler(Application_PreTranslateMessage);
      }
    }
}

xiongdi6k 发表于 2020-4-2 11:52:56

回帖是一种美德!感谢楼主的无私分享 谢谢

china-hz 发表于 2009-12-17 20:55:00

<p>麻烦高手转成vb.net。</p>

wylong 发表于 2009-12-17 21:02:00

转成vb.net
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports System.Windows.Interop
Imports System
Namespace PreTranslate
    Public Class Commands
      Const WM_MOUSEWHEEL As Integer = 522
      <CommandMethod("testOn")> _
      Public Sub testOn()
            AddHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage
      End Sub
      Private Sub Application_PreTranslateMessage(ByVal sender As Object, ByVal e As PreTranslateMessageEventArgs)
            If e.Message.message = WM_MOUSEWHEEL Then
                System.Windows.Forms.MessageBox.Show("你在CAD操作中转动滚轮了!")
            End If
      End Sub
      <CommandMethod("testOff")> _
      Public Sub testOff()
            RemoveHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage
      End Sub
    End Class
End Namespace

游天居士 发表于 2009-12-17 21:40:00

顶。 一下。收藏了。

英雄无敌 发表于 2009-12-23 09:43:00

<p>麻烦哪位VB.net高手解释一下这句话的意思是什么?</p><p>AddHandler Application.PreTranslateMessage, AddressOf Application_PreTranslateMessage</p><p>addhandler应该是添加一个回传,就是是相当于VB中的钩子吧,可能是,但Application是指谁呢,是指.net所做的程序吗?</p><p>如果这样的话,是不是在别的窗口中按滑轮,也会有相应的消息弹出来呢?</p><p>我以前装了。net,但不会用删了,现在试不了,有时候再试试,也希望高手能做一些解答。</p>

英雄无敌 发表于 2009-12-23 10:28:00

还有,上述vb.net代码应怎样才能运行?要引用哪一个CAD的类库呢

雪山飞狐_lzh 发表于 2009-12-23 23:45:00

<p>Application:AutoCad的Net版本应用程序实例</p><p>引用Cad目录下的两个托管Dll:AcDbMgd.dll,AcMgd.dll</p><p>上面的功能在2009以上版本可以实现,低版本要用另外的办法</p>

英雄无敌 发表于 2009-12-25 08:58:00

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

yanglin112 发表于 2011-11-1 11:54:09

新手学习了!!

wenxinwen 发表于 2011-11-14 11:16:30

09版本以下除了用钩子函数以外还有别的办法实现没?
页: [1] 2
查看完整版本: 捕捉AutoCAD的鼠标滚轮事件