【问题标题】:Get WPF context menu to open over win32 child window?获取WPF上下文菜单以通过win32子窗口打开?
【发布时间】:2012-07-15 04:37:24
【问题描述】:

我有一个子窗口(或控制,如果你愿意的话),它利用在本机 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;
}

非常感谢任何朝着正确方向的推动!!

谢谢。

【问题讨论】:

    标签: wpf interop contextmenu


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2016-08-22
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      相关资源
      最近更新 更多