在Revit中模拟按键
接触Revit二次开发也有一段时间了,Revit的架子搭得很大,从最开始的不知所措到今天也算有了一点点经验,遇到问题也大概知道要怎样去处理了。不过Revit的API也有很多让人头疼的地方,不过可以看到它一直都在改进的。心血来潮来开了个博客,想把Revit开发中碰到的一些问题写下来,主要也是为了给自己做个总结,然后也可以记录Revit API的一些转变。当然若是能有幸帮到后来者,也是我的荣幸。
我对Revit API的学习主要来自于官方的SDK资料,然后还有就是Jeremy
Tammik的博客。后者是Revit的架构师,摘花换酒翻译过很多他的博文,不过最近也停止了,兴许是太忙。我想我的很多问题可能还是会回到Jeremy的博客中去寻找答案。最近有人问我如何终结一个未知的事务,从API来看似乎是找不到答案的,于是想到了一些dirty的方法,就是在Revit主界面中按两次Esc。这个操作对于非模态窗口的命令来说还是很有意义的,因为用户可能真的在事务进行的时候点击了非模态窗口的按钮出发了下一个事务,这样就形成了一个事务队列给人造成困扰。当然要是让非模态窗口在有事务运行的时候变成不可操作状态可能是一个更好的方案吧,不过API似乎还不支持。不过现在还是想想怎么在Revit中按两次Esc,获取Revit窗口的句柄肯定是必须的。
Jeremy果然在他的博客中也提到了这个方法,他似乎遇到过所有的情况啊。以下是他关于在Revit中虚拟按键的博文:Jeremy博文,主要的思路就是获取Revit主窗口的句柄,然后虚拟按键。
按照他的方法,完全可以模拟Esc的情况,不过记得要按两次。这样只要在非模态窗口的命令触发之前按两次Esc,就可以直接取消掉当前的事务,直接进行非模态窗口触发的事务了。
不过这样做非模态窗口会失去焦点,此时调用Form.Activate()方法可以重新设置非模态窗口为激活状态。
好了,第一篇博文就写到这里。希望会常来。。如果我还记得。2015.3.13: Form.Activate()方法似乎仍然不能激活窗口。可能和线程有关。