繁体   English   中英

Windows窗体:防止ActiveX获取鼠标事件

[英]Windows Forms: prevent ActiveX from getting mouse events

上下文

在Win7的C#Windows窗体应用程序中,我们托管一个ActiveX控件。 到现在为止还挺好。

需要:防止ActiveX接收鼠标事件

实际上,ActiveX具有太多的功能。 关闭我们不需要的功能不是很可定制。

如果我们只是阻止它接收鼠标事件,那就太好了。

理想的做法是将事件视为好像ActiveX不存在一样,也就是说,鼠标单击将直接到达基础(或包含)控件。

但是,如果我们只是阻止ActiveX获得事件,那对我们来说是可以的。

询问前先搜寻

先前问题的一些答案提到了protected override void WndProc(ref Message m) ,例如c#-将鼠标事件传递给父控件-代码日志

实现IMessageFilters的其他提及,例如:

实验:ActiveX仍会获取事件

我已经相当广泛地尝试了override WndProcIMessageFilter方式,过滤(选择加入和选择退出)许多事件。 在某些情况下,我可以阻止事件到达本机C#控件,但是ActiveX仍然占有份额。

过滤太多,阻止控件和ActiveX绘制,甚至阻止应用程序正确绘制,或者导致退出时崩溃。 可以通过仔细选择启用或退出选项来避免此情况。

还有另一种方法吗?

从C#/。NET是否有另一种方法来承载ActiveX控件,同时防止它获得鼠标事件? 也许在应用程序启动时?

创建完后,尝试在ActiveX控件的最上层hwnd上执行EnableWindow(hand,FALSE)。 请参见使用窗口句柄使用c#禁用鼠标单击,以及如何在c#中执行此操作。

我只是面临相同的问题(使用不同的ActiveX)。

@GunnarRoth的答案以及使用c#禁用页面单击来禁用鼠标单击的页面-堆栈溢出表示具有窗口句柄的特定于平台的魔术,如果可能的话,最好避免使用。

仍然提示其名称中已Enabled

ActiveX宿主对象是Windows窗体控件。 我只设置Enabled=false ,效果正好是我想要的:ActiveX看不到鼠标单击或键盘事件,但仍然显示正常。

我什至不知道这是否可以用最初的ActiveX控件回答我的最初问题,但是这次可以了! :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM