Raymond Chenは、数年前、コンテキストメニューのホスティングに関する多くのパートのシリーズでこの正確な問題について書いています。彼の記事の重要なテーマは、ドキュメントを読むときに、プログラムがシェルの一部を果たしていることを覚えておく必要があるということでしたが、ドキュメントは通常、コンテキストメニューインターフェイスを実装するコードの観点から書かれています。それらを呼び出すコードに。
パート2の早い段階で、Chenは、send-toメニューとopen-withメニューが空になっていることを確認しました。第5部では、これらのサブメニューに関する差し迫った懸念に対処します。答えは、メニューメッセージを処理する必要があるということです。メニューに関連付けられたウィンドウハンドルがあります— TrackPopupMenuEx
(あなたの質問に対するIssamの回答HND
で)あなたが提供したハンドルです。そのウィンドウは、メニューがアクティブな間メッセージを受信し、メニューコマンドを実装しているオブジェクトにメッセージを転送する必要があります。ウィンドウにはウィンドウプロシージャがあり、ここでメニューインターフェイスとメソッドを呼び出す必要があります。記事には例があります。HandleMenuMsg
HandleMenuMsg2
記事シリーズの他の部分では、メニューが「ほぼ」機能すると言ったときに間違いなくほのめかした他のことを取り上げています。第3部では、プロパティダイアログが表示される場所について説明します。パート7は、デフォルトの動詞の呼び出しについてです。シリーズ全体をお読みになることをお勧めします。すべてがC++であることを恐れないでください。ほとんどすべてのインターフェイスメソッドとAPI関数なので、問題なくDelphiに変換できるはずです。