【发布时间】:2015-10-08 21:37:47
【问题描述】:
注意:我正在尝试解决鼠标问题,而不是已经解决的键盘问题
所以我正在创建一个 Visual Studio 2015 扩展,在选项页面上工作。
我正在使用 WPF,因此我使用 ElementHost 来托管 UserControl。起初它没有收到键盘事件,所以我在以下位置实现了解决方案:
WPF TextBox not accepting Input when in ElementHost in Window Forms
解决方案的简要介绍:
A) 在 UserControl 的 Loaded 事件上,我会这样做:
var s = HwndSource.FromVisual(this) as HwndSource;
s?.AddHook(ChildHwndSourceHook);
B) 在 ChildHwndSourceHook() 中,我执行以下操作:
static IntPtr ChildHwndSourceHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_GETDLGCODE)
{
handled = true;
return new IntPtr(DLGC_WANTCHARS | DLGC_WANTARROWS | DLGC_HASSETSEL | DLGC_WANTTAB);
}
return IntPtr.Zero;
}
但是,现在鼠标悬停的事件似乎被忽略了,因为光标在文本框或网格拆分器上移动时不会改变,即使在我创建的新 Windows 上也是如此。 偶尔,虽然鼠标事件确实有效,但会继续有效,直到我移动到另一个页面或关闭对话框。这是最奇怪的部分。
我已经尝试了所有方法,并且整天都在谷歌上搜索,但我无法理解为什么点击可以正常工作,但鼠标悬停事件似乎没有被注册。
我确实尝试过删除消息处理程序,然后打开一个窗口,但似乎一旦添加了处理程序,删除它就不会解决任何问题。
有谁知道如何让鼠标悬停在事件上以在我的控件上工作?非常感谢!
【问题讨论】:
-
一段代码没有做它应该有用的事情。
标签: wpf winforms mouseover visual-studio-extensions elementhost