:http://objectarx.net/forum.php?mod=viewthread&tid=10613
:http://adndevblog.typepad.com/autocad/2013 ... focus-in-autocad-2014.html
AutoCAD 2014中新的API引进了Window.Focus方法。当你使用面板来调用一个需要用户输入的命令时,这个方法非常有用。在AutoCAD以前的版本中,只有当AutoCAD编辑器窗口被点击后,编辑器窗口才能取得焦点。这会有点麻烦,因为你需要一次额外的鼠标点击才能进行输入。解决这个问题的办法要么调用Win32 API的SetFocus函数或者使用一个未公开的方法:Internal.Utils.SetFocusToDwgView。
AutoCAD 2014的Window.Focus方法可以用来替代上述两个办法。例如,如果你要使用面板中的按钮插入一个名为Autodesk的块,那么你可以在按钮点击的回调函数中使用Window.Focus方法
The new API in AutoCAD 2014 includes the Window.Focus method. This method is very useful if you were using palette to call a command that requires AutoCAD to prompt for user input. In earlier versions of AutoCAD, the AutoCAD editor did not receive focus until the editor was clicked. This was a bit troublesome as it required an additional mouse click. The way to overcome it was to either call the "SetFocus" Win32 API through a dllimport or to use an internal undocumented method : "Internal.Utils.SetFocusToDwgView".
With AutoCAD 2014, the "Window.Focus" method can be used instead. As an example, if you had a button in the palette to insert a block named "Autodesk", then you can use the Window.Focus method from the button click callback method as :
using Autodesk.AutoCAD.ApplicationServices;
using AAA = Autodesk.AutoCAD.ApplicationServices;
private void InsertBlockBtn_Click(object sender, EventArgs e)
{
AAA.Document activeDoc
= AAA.Application.DocumentManager.MdiActiveDocument;
dynamic acadDocObj = activeDoc.GetAcadDocument();
activeDoc.Window.Focus();
acadDocObj.SendCommand(String.Format("-Insert\nAutodesk\n"));
// or
//object acadDocObj = activeDoc.GetAcadDocument();
//activeDoc.Window.Focus();
//object[] OnedataArry = new object【1】;
//OnedataArry[0] = String.Format("-Insert\nAutodesk\n");
//acadDocObj.GetType().InvokeMember(
// "SendCommand",
// System.Reflection.BindingFlags.InvokeMethod,
// null, acadDocObj, OnedataArry
//);
}
using AAA = Autodesk.AutoCAD.ApplicationServices;
private void InsertBlockBtn_Click(object sender, EventArgs e)
{
AAA.Document activeDoc
= AAA.Application.DocumentManager.MdiActiveDocument;
dynamic acadDocObj = activeDoc.GetAcadDocument();
activeDoc.Window.Focus();
acadDocObj.SendCommand(String.Format("-Insert\nAutodesk\n"));
// or
//object acadDocObj = activeDoc.GetAcadDocument();
//activeDoc.Window.Focus();
//object[] OnedataArry = new object【1】;
//OnedataArry[0] = String.Format("-Insert\nAutodesk\n");
//acadDocObj.GetType().InvokeMember(
// "SendCommand",
// System.Reflection.BindingFlags.InvokeMethod,
// null, acadDocObj, OnedataArry
//);
}
[本日志由 tiancao1001 于 2014-01-19 01:52 AM 编辑]
|
暂时没有评论
发表评论 - 不要忘了输入验证码哦! |