AutoCAD.net 自定义窗体及面板与CAD交互时的焦点切换问题(C#)

本文介绍如何使用C#创建的自定义窗口在CAD环境中无缝切换焦点,通过调用SetFocus函数解决鼠标离开窗口后CAD界面响应延迟的问题,确保了交互操作的流畅性。

C#创建的自定义窗口和面板在加载到CAD进行显示时,会自动获取句柄,有时候需要返回CAD界面进行操作(如选择对象)时,鼠标离开自定义窗口或者面板后,CAD无法获得句柄,需要点选一下CAD操作空间后,才能开始交互操作,给程序运行带来诸多不便:
在这里插入图片描述
为了解决该问题,需要利用Windows API函数SetFocus实现,具体步骤为:
在类开头添加api函数申明

[DllImport("user32.dll", EntryPoint = "SetFocus")]
public static extern int SetFocus(IntPtr hWnd);
同时,在窗体或面板类的MouseLeave事件中调运SetFocus函数
        private void PaletteDict_MouseLeave(object sender, EventArgs e)
        {
            SetFocus(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Window.Handle);
        }
但是,测试发现该方式在鼠标快速移动时,焦点切换明显滞后,为此,本人亲测发现,可以在具体的交互操作中继续添加SetFocus函数的调用:
            Document doc = acadApp.DocumentManager.MdiActiveDocument;
            DocumentLock docLock = doc.LockDocument();
            Database db = doc.Database;
            Editor ed = doc.Editor;

            SetFocus(doc.Window.Handle);//提前调用

            PromptEntityResult per = ed.GetEntity("\n请选择对象");
            using (Transaction tran=db.TransactionManager.StartTransaction()
            {
            	...
            }
可有效解决焦点切换滞后的问题!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值