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

C#创建的自定义窗口和面板在加载到CAD进行显示时,会自动获取句柄,有时候需要返回CAD界面进行操作(如选择对象)时,鼠标离开自定义窗口或者面板后,CAD无法获得句柄,需要点选一下CAD操作空间后,才能开始交互操作,给程序运行带来诸多不便:
AutoCAD.net 自定义窗体及面板与CAD交互时的焦点切换问题(C#)_第1张图片
为了解决该问题,需要利用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()
            {
            	...
            }
可有效解决焦点切换滞后的问题!

你可能感兴趣的:(用户界面)