2

ネイティブの win32 でプログラムされた Direct2D を利用する子ウィンドウ (またはコントロール) があります。そのウィンドウを WPF ui に埋め込んでいます。WPFでWin32コントロールをホストするMSDNを使用して、すべてがうまく いきます-もちろん、いくつかの調整があります。

私の WPF アプリには、アプリのどこにでも表示されるコンテキスト メニューがありますが、もちろん、メッセージが WndProc に送信され、WPF によって処理されないため、win32 子ウィンドウでは機能しません。

HwndHost::WndProcをオーバーライドしようとしましたが、右クリックを正常にトラップできましたが、この時点で MainWindow オブジェクトにアクセスできないため、「Window.ContextMenu」を開くことができません。

win32メソッドをインポートして新しいウィンドウメッセージを生成し、WPFを「だまして」win32子ウィンドウにコンテキストメニューを表示させるなど、クレイジーなことも試しました。

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

     handled = true;
}

正しい方向へのプッシュは大歓迎です!!

ありがとう。

4

1 に答える 1

0

win32 ウィンドウの上に透明な Wpf ウィンドウを配置してみてください。これにより、wpf 内のすべてのマウス イベントを制御したり、メニューを表示したりできます。同時に、Win32 コードに表示させたいマウス イベントを渡すことができます。 WM_LBUTTONDOWN メッセージなどを win32 に偽装することによって。

于 2012-07-15T17:38:53.547 に答える