获取WPF上下文菜单打开win32子窗口?

时间:2012-07-15 04:37:25

标签: wpf interop contextmenu

我有一个子窗口(或控件,如果你愿意),它使用在原生win32中编程的Direct2D。我在WPF ui中嵌入了该窗口。一切都很好,使用MSDN Hosting a Win32 Control in WPF - 当然还有一些调整。

我的WPF应用程序有一个上下文菜单应该出现在应用程序的任何地方,但当然它不能在win32子窗口上工作,因为消息被发送到它的WndProc而不是由WPF处理。

我尝试覆盖HwndHost::WndProc并成功捕获右键单击,但无法打开“Window.ContextMenu”,因为此时我无法访问MainWindow对象。

我甚至尝试过疯狂的东西,例如通过导入win32方法生成新的Windows消息,然后尝试“欺骗”WPF,在win32子窗口上给我一个上下文菜单:

if (msg == WM_RBUTTONUP)
{
    IntPtr parent = GetParent(hwndHandle);
    PostMessage(parent, (int)0x0205, (IntPtr)0x0002, lParam);

     handled = true;
}

任何正确方向的推动都会非常感激!!

感谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试在win32窗口顶部放置一个透明的Wpf窗口,这样您就可以控制wpf,显示菜单等中的所有鼠标事件。同时,您可以传递任何想要Win32的鼠标事件通过将WM_LBUTTONDOWN消息等欺骗到win32中来查看代码。