2009-07-28 25 views
2

私のアプリケーションの1つに、ファイルエクスプローラのようなWindowsエクスプローラがあります。ユーザーがファイルを右クリックすると、エクスプローラのコンテキストメニューが表示されます(いくつかのオプションがあります)。しかし、ユーザーがリストコントロール自体を右クリックすると(選択された項目がない)、「正しい」コンテキストメニューを表示できません。 Windowsエクスプローラに表示されているものを、左側のツリーのものではなく、右側に表示したいと思います。右側のエクスプローラのコンテキストメニュー(IID_IContextMenu?)

私はGetUIObjectOfへの呼び出しでさまざまなバリエーションを試しました。私はGoogle Webなどをサーフィンしましたが、まだ解決策が見つかりませんでした。どんな助け?

+0

これは本当に難しい質問です。私は誰も答えを知っていることを疑う:-) –

答えて

2

IShellFolder :: CreateViewObject()を呼び出して、フォルダ自体のIContextMenuを取得します。 IShellFolder :: GetUIObjectOf()は、フォルダー内ではなく、フォルダー内の個々の項目のインターフェイスを取得するためのものです。これは、MSDNのドキュメントに記載されている:

IShellFolder::CreateViewObject Method

この方法は、 IContextMenu又はIExtractIconを含むいくつかの 任意インターフェイス、のいずれかを露出 オブジェクトを要求するために使用されます。この コンテキストでは、CreateViewObjectは と同様で、 IShellFolder :: GetUIObjectOfです。ただし、 IShellFolder :: GetUIObjectOfを と呼び、フォルダに格納されている アイテムのいずれかのオブジェクトを要求します。 IShellFolder :: CreateViewObjectを に呼び出すと、フォルダ のオブジェクトが要求されます。

+0

ありがとう。魅力的な作品:-) –

0

Remy Lebeauが投稿した解決策はおそらくありますが、シェルオブジェクトのすべてを使用していない場合や、さらにカスタマイズされたメニューが必要な場合は、HKCR \ Directory \ Backgroundのリストメニュー項目の残りの部分であるIContextMenuを実装しているGUIDは、自分で追加する必要があります。

関連する問題