CContextMenuManager上下文選單管理器以及為選單新增圖示
阿新 • • 發佈:2018-12-21
在Visual Studio 2008SP1中,要彈出上下文關聯選單的話,只需要在應用程式初始化的時候呼叫CWinAppEx::InitContextMenuManager,然後使用CWinAppEx::GetContextMenuManager獲得一個指向應用程式的上下文管理器。如果工程是單文件/多文件的話,可能會自動關聯一個右鍵選單,可以在應用程式的實現檔案看到類似如下程式碼:
// CXXXApp 自定義載入/儲存方法 void CXXXApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); }要彈出選單的時候,只需要呼叫ShowPopupMenu即可。如下類似:
如果是要彈出另一個選單資源ID的話,需要先在CXXXApp::PreLoadState()裡面新增快捷選單,如下:
void CXXXApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); GetContextMenuManager()->AddMenu(_T("專門編輯"這時,才能使用下面語句呼叫:
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_FOREDIT, point.x, point.y, this, TRUE);要為選單新增圖示的話,要使用到CMFCToolBar::AddToolBarForImageCollection ()函式,其函式原型如下:
static BOOL __stdcall AddToolBarForImageCollection( UINT uiResID, //Resource ID of a toolbar with images to load. UINT uiBmpResID=0, //Resource ID of a bitmap with toolbar images. UINT uiColdResID=0, //Resource ID of a bitmap with "cold" toolbar images. UINT uiMenuResID=0, //Resource ID of a bitmap with menu images. UINT uiDisabledResID=0,//Resource ID of a bitmap with disabled toolbar images. UINT uiMenuDisabledResID=0 //Resource ID of a bitmap with disabled menu images. );在資源檢視ToolBar插入一個ToolBar,然後建立四個工具欄物件,如下圖所示:
接著四個工具欄物件的ID號要跟需要繫結到選單項圖示的ID號一致,且順序一致。接著把預先準備好的工具欄影象點陣圖BMP,載入到資源視圖裡面,修改其ID為IDB_POPUP_BITMAP,如下圖所示:
然後,在初始化函式OnInitialUpdate()下新增入下程式碼:
CMFCToolBar::AddToolBarForImageCollection (IDR_TOOLBAR1,IDB_POPUP_BITMAP);執行程式就可以看到效果了,但是此時還是灰色狀態,為選單項“新增事件處理程式”,結果如下圖所示: