|
秀さん、こんにちは。FM-Products の柳です。
On Tue, 27 Jun 2000 09:36:16 +0900
秀まるお <xxxxxxxxxx@maruo.co.jp> wrote:
> 「送る」に何も出てこないのは、実は前からです。バグと言えばバグなんですが、
> 直し方が分からなくてそのままになってます。
>
> ファイルのIDITEMLISTを作成して、それからGetUIObjectOfを使ってIID_IContextM
> enuのインタフェースを取り出して、そこからQueryContextMenu()してメニューを出
> しているんだけど、それでは処理が足りないみたいで…。
>
> 誰か詳しい人いたら教えてほしい…。
簡単に説明しますと。
GetUIObjectOf()を使って、IContextMenuオブジェクトのハンドルを取得
したら、そのハンドルを使ってIContextMenu2オブジェクトのハンドルを
取得します。
// C++なコードですが(^_^;
/////////////////////////////////////////////////////////////////
static LPCONTEXTMENU lpConTextMenu = NULL;
static LPCONTEXTMENU2 lpConTextMenu2 = NULL;
{
if ( SUCCEEDED( lpParentFolder->GetUIObjectOf( hWnd, nFiles,
(LPCITEMIDLIST*)lpItemIDLists,
IID_IContextMenu, 0, (LPVOID *)&lpConTextMenu ) ) )
{
lpConTextMenu->QueryInterface( IID_IContextMenu2,
(LPVOID *)&lpConTextMenu2 );
.
.
.
.
}
}
/////////////////////////////////////////////////////////////////
で、IContextMenu2オブジェクトを取得できた場合は、送るメニューが
存在しています。
この場合、親ウィンドウへ WM_INITMENUPOPUP,WM_MEASUREITEM,
WM_DRAWITEM の3つのメッセージが送られてきますので、このメッセージ
を受け取ったら、IContextMenu2::HandleMenuMsg を呼び出してやるだけ
です。
/////////////////////////////////////////////////////////////////
void ShellHandler(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (lpConTextMenu2)
{
lpConTextMenu2->HandleMenuMsg(uMsg, wParam, lParam);
}
}
/////////////////////////////////////////////////////////////////
処理が終了したら、IContextMenuオブジェクト同様 Release() を呼
び出してオブジェクトを開放してやってください。
このような感じですが、不足していることがありましたら、ご指摘
くださいませ。
======================================================
柳 直樹 --- Naoki Yanagi --- (^_-)
NIFTY-Serve : KFE03771
E-Mail : yanagi@sun-inet.or.jp
: xxxxxxxxxxxx@nifty.ne.jp
Home Page : http://www.sun-inet.or.jp/~yanagi/
======================================================
|
|