2012-08-25 119 views
1

我正在使用pInvoke,IShellExtInitIContextMenu向C#中的資源管理器外殼添加上下文菜單。如何在C#中的Windows shell上下文菜單中創建子菜單?

我可以使用下面的代碼添加到右鍵菜單中的單個項目:

MENUITEMINFO mii = new MENUITEMINFO(); 
mii.cbSize = (uint)Marshal.SizeOf(mii); 
mii.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE | MIIM.MIIM_ID | MIIM.MIIM_STATE ; 
mii.wID = idCmdFirst + increment; 
mii.fType = MFT.MFT_STRING; 
mii.dwTypeData = contextMenuItem.ItemText; 
mii.fState = MFS.MFS_ENABLED; 
mii.hbmpItem = this._pMenuBitmap; 

NativeMethods.InsertMenuItem(hMenu, increment, true, ref mii) 

我希望做的是增加一個菜單樹;即爲新創建的菜單項添加一個子菜單。我的第一個直覺是使用:

var subMenu = mii.hSubMenu; 
... 
NativeMethods.InsertMenuItem(subMenu,....) 

但子菜單總是零值。

任何人都可以幫助我嗎?

+0

它不建議使用託管代碼編寫外殼擴展:http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx –

+0

@StephenEllis難道你曾經實現這個解決方案,我已經得到我的上下文菜單顯示,但現在我想弄清楚如何處理點擊。子菜單不會調用invoke命令方法。 – blak3r

+0

@ blak3r我確實。我不得不再次看看代碼,因爲我不記得遇到點擊回調的問題。 –

回答

1

我認爲你的意思是你想要一個級聯的子菜單彈出?

您需要使用:

  • CreatePopupMenu()創建一個新的菜單
  • 添加/插入您的菜單項爲它
  • 然後用MENUITEMINFO你設置.hSubMenu到菜單的手柄,並使用MIIM_SUBMENU | MIIM_TYPE掩碼插入通過IContextMenu:QueryContextMenu獲得的上下文菜單。

http://forum.cockos.com/archive/index.php/t-20799.html