![]() |
1
4
当通过ActiveX托管Office应用程序时,您会发现某些Office应用程序的某些版本对于被告知窗口激活更改非常敏感,这会特别影响到它们的上下文菜单。 基本上,如果你不告诉他们何时失去或获得焦点,也不告诉你的顶级窗口何时获得或失去焦点(即使他们在窗口中的子控件没有获得焦点),那么他们可能会失控。 这是我与之斗争了很长一段时间的事情,尤其是当你不得不告诉应用程序他们比你更了解的事情时(比如当他们失去或直接获得焦点时。。。或者,当他们创建一个弹出式菜单,将焦点从他们身上移开,并且必须以不同于其他应用程序/窗口的方式来处理焦点时,你将被留给神。。。啊。
从内存中,快速查看一下我自己的托管Office代码,这是最重要的事情之一。这也是一件容易忽视的事情,心想“不,没什么大不了的。。。为什么有人会那么在意窗口是否处于活动状态呢?“你可能会认为这只会导致一些小的装饰问题(比如它不处于活动状态时显得很活跃),但它可能会导致整个事情锁定或崩溃。相信我,办公室太关心这些事情了!我得到的印象是,在办公室的掩护下,仍然有一个非常古老的,单线程的设计,从合作多任务的日子里,它会变得非常混乱,当它的两个窗口似乎同时活跃。
最后一条建议:不要害怕为特定的应用程序编写代码。这就是IE本身所做的,通过注册表设置来控制哪些乱七八糟的东西被应用到什么东西上(我怀疑代码中有更多的硬编码)。ActiveX是一个定义很差的烂摊子,各种控件都有自己的怪癖和错误,不可能编写一个干净的、通用的主机来处理所有这些控件(你也会发现,只有当你按照IE的顺序尝试接口时,才有效果,因为它们只经过IE的测试;做事稍有不同就会分崩离析( |
![]() |
2
0
我想知道你是否能钓到鱼
那对你有用吗? |
![]() |
3
0
也许您可以使用组件调用应用程序。我从来没有遇到过这样的问题:创建一个自定义组件,通过接口调用word,然后在菜单中注册特殊命令。在一个容器里你不能在窗体上设计一个特殊的菜单吗?有几个WordSink Evenets可以帮助保存和关闭,它们可以与word com对象一起使用。 |
![]() |
Patrick Bender · 使用批处理文件发送到 7 年前 |
![]() |
user650881 · 在Chrome扩展中禁用父上下文菜单 7 年前 |
![]() |
Lázár Zsolt · WPF上下文菜单位于鼠标左侧 7 年前 |
![]() |
miatech · 有人能给我指一下列表视图中的上下文菜单吗 7 年前 |
![]() |
LarsMonty · Angular中的自定义关联菜单 7 年前 |