我为Visual Studio 2005/2008编写了一个加载项。它将提示一个带有一些编辑控件的窗口作为子窗口。但如果打开VS
我想我找到了原因。如果我删除VS中的命令绑定,例如命令Edit.InsertTab与Tab绑定,那么当我在加载项中键入Tab时,输入焦点不会丢失。
我尝试用模态对话框替换我的加载项窗口,这对我来说很惊讶,输入焦点不会丢失。
我想知道原因。而且我不想使用对话框。任何人都可以告诉我如何解决它。感谢。
答案 0 :(得分:3)
之所以如此,是因为键盘输入在Visual Studio中的路由非常复杂。
Visual Studio消息循环将为Windows消息(不包括字母数字输入)提供Visual Studio命令的优先级。它将调用活跃IOleCommandTarget
的{{1}}链。您提到的密钥由编辑器的某些部分专门处理,因此它们优先,处理消息并导致您的输入失去焦点。
解决此问题的方法是将IVsTextView
实例添加到活动视图的IOleCommandTarget
OLE命令目标链中。当您的窗口处于活动状态时,您可以截取给定的键,将它们标记为已禁用,然后它们将被路由到您的窗口。
我很乐意在这里提供一个小代码片段,但不幸的是,没有一个小代码片段可以充分展示这个解决方案。相反,我会指出你在Visual Studio的Vim模拟器中使用的相同技巧。