CContextMenuManager 類別
物件 CContextMenuManager
會管理快捷功能表,也稱為操作功能表。
語法
class CContextMenuManager : public CObject
成員
公用建構函式
名稱 | 描述 |
---|---|
CContextMenuManager::CContextMenuManager | 建構 CContextMenuManager 物件。 |
CContextMenuManager::~CContextMenuManager |
解構函式。 |
公用方法
名稱 | 描述 |
---|---|
CContextMenuManager::AddMenu | 加入新的快捷方式功能表。 |
CContextMenuManager::GetMenuById | 傳回與所提供資源標識符相關聯的功能表句柄。 |
CContextMenuManager::GetMenuByName | 傳回符合所提供功能表名稱的功能表句柄。 |
CContextMenuManager::GetMenuNames | 傳回功能表名稱的清單。 |
CContextMenuManager::LoadState | 載入儲存在 Windows 登錄中的快捷功能表。 |
CContextMenuManager::ResetState | 從操作功能表管理員清除快捷方式功能表。 |
CContextMenuManager::SaveState | 將快捷方式功能表儲存至 Windows 登錄。 |
CContextMenuManager::SetDontCloseActiveMenu | 控制 在顯示新快捷功能表時,是否 CContextMenuManager 關閉使用中快捷功能表。 |
CContextMenuManager::ShowPopupMenu | 顯示指定的快捷方式功能表。 |
CContextMenuManager::TrackPopupMenu | 顯示指定的快捷方式功能表。 傳回選取選單命令的索引。 |
備註
CContextMenuManager
會管理快捷功能表,並確定其外觀一致。
您不應該手動建立 CContextMenuManager
物件。 應用程式的架構會 CContextMenuManager
建立物件。 不過,當您的應用程式初始化時,您應該呼叫 CWinAppEx::InitContextMenuManager 。 初始化內容管理員之後,請使用 CWinAppEx::GetContextMenuManager 方法來取得應用程式內容管理員的指標。
您可以在執行時間建立快捷選單,方法是呼叫 AddMenu
。 如果您要在不先接收使用者輸入的情況下顯示選單, 請呼叫 ShowPopupMenu
。 TrackPopupMenu
當您要建立選單並等候使用者輸入時, 會使用 。 TrackPopupMenu
會傳回所選取命令的索引,如果使用者未選取任何專案,則傳回 0。
CContextMenuManager
也可以儲存並載入其狀態至 Windows 登錄。
範例
下列範例示範如何將功能表新增至 CContextMenuManager
物件,以及如何在對象顯示新的快捷功能表時 CContextMenuManager
,不要關閉使用中的快捷功能表。 此代碼段是自定義頁面範例的一部分。
// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);
繼承階層架構
CContextMenuManager
需求
標頭: afxcontextmenumanager.h
CContextMenuManager::AddMenu
將新的快捷方式功能表新增至 CContextMenuManager。
BOOL AddMenu(
UINT uiMenuNameResId,
UINT uiMenuResId);
BOOL AddMenu(
LPCTSTR lpszName,
UINT uiMenuResId);
參數
uiMenuNameResId
[in]字串的資源識別元,其中包含新功能表的名稱。
uiMenuResId
[in]功能表資源標識碼。
lpszName
[in]包含新功能表名稱的字串。
傳回值
如果方法成功,則為非零;如果方法失敗,則為 0。
備註
如果 uiMenuResId 無效,或另一個具有相同名稱的功能表已在 中 CContextMenuManager
,則這個方法會失敗。
CContextMenuManager::CContextMenuManager
CContextMenuManager();
備註
在大部分情況下,您不應該手動建立 CContextMenuManager
。 應用程式的架構會 CContextMenuManager
建立物件。 您應該在應用程式初始化期間呼叫 CWinAppEx::InitContextMenuManager 。 若要取得內容管理員的指標,請呼叫 CWinAppEx::GetContextMenuManager。
CContextMenuManager::GetMenuById
傳回與指定資源標識符相關聯的功能表句柄。
HMENU GetMenuById(UINT nMenuResId) const;
參數
nMenuResId
[in]功能表的資源標識碼。
傳回值
關聯選單的句柄,如果 NULL
找不到功能表,則為 。
CContextMenuManager::GetMenuByName
傳回特定功能表的句柄。
HMENU GetMenuByName(
LPCTSTR lpszName,
UINT* puiOrigResID = NULL) const;
參數
lpszName
[in]包含要擷取之功能表名稱的字串。
puiOrigResID
[out]UINT 的指標。 如果找到,此參數會包含指定功能表的資源識別碼。
傳回值
符合 lpszName 所指定名稱之功能表的句柄。 如果沒有稱為 lpszName 的功能表,則為 NULL。
備註
如果此方法找到符合 lpszName 的功能表,GetMenuByName
請將功能表資源標識碼儲存在 puiOrigResID 參數中。
CContextMenuManager::GetMenuNames
傳回新增至 CContextMenuManager 的功能表名稱清單。
void GetMenuNames(CStringList& listOfNames) const;
參數
listOfNames
[out]CStringList 參數的參考。 這個方法會將功能表名稱清單寫入此參數。
CContextMenuManager::LoadState
從 Windows 登錄載入與 CContextMenuManager 類別 相關聯的資訊。
virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);
參數
lpszProfileName
[in] 包含登錄機碼相對路徑的字串。
傳回值
如果方法成功,則為非零;否則為 0。
備註
lpszProfileName 參數不是登錄項目的絕對路徑。 它是新增至應用程式默認登錄機碼結尾的相對路徑。 若要取得或設定默認登錄機碼,請分別使用 CWinAppEx::GetRegistryBase 和 CWinAppEx::SetRegistryBase 的方法。
使用 CContextMenuManager::SaveState 方法,將快捷方式功能表儲存至登錄。
CContextMenuManager::ResetState
從與 CContextMenuManager 類別相關聯的快捷功能表清除所有專案。
virtual BOOL ResetState();
傳回值
如果方法成功,則為TRUE;如果發生失敗,則為 FALSE。
備註
這個方法會清除快捷功能表,並從中移除它們 CContextMenuManager
。
CContextMenuManager::SaveState
將與 CContextMenuManager 類別 相關聯的資訊儲存至 Windows 登錄。
virtual BOOL SaveState(LPCTSTR lpszProfileName = NULL);
參數
lpszProfileName
[in] 包含登錄機碼相對路徑的字串。
傳回值
如果方法成功,則為非零;否則為 0。
備註
lpszProfileName 參數不是登錄項目的絕對路徑。 它是新增至應用程式默認登錄機碼結尾的相對路徑。 若要取得或設定默認登錄機碼,請分別使用 CWinAppEx::GetRegistryBase 和 CWinAppEx::SetRegistryBase 的方法。
使用 CContextMenuManager::LoadState 方法,從登錄載入快捷功能表。
CContextMenuManager::SetDontCloseActiveMenu
控制 CContextMenuManager 是否會在顯示新的快捷功能表時關閉使用中的快捷功能表。
void SetDontCloseActiveMenu (BOOL bSet = TRUE);
參數
bSet
[in]布爾值參數,控制是否要關閉作用中的快捷功能表。 TRUE 值表示作用中的快捷功能表未關閉。 FALSE 表示作用中的快捷功能表已關閉。
備註
根據預設,會 CContextMenuManager
關閉使用中的快捷功能表。
CContextMenuManager::ShowPopupMenu
顯示指定的快捷方式功能表。
virtual BOOL ShowPopupMenu(
UINT uiMenuResId,
int x,
int y,
CWnd* pWndOwner,
BOOL bOwnMessage = FALSE,
BOOL bRightAlign = FALSE);
virtual CMFCPopupMenu* ShowPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bOwnMessage = FALSE,
BOOL bAutoDestroy = TRUE,
BOOL bRightAlign = FALSE);
參數
uiMenuResId
[in]這個方法將顯示之功能表的資源標識碼。
x
[in]用戶端座標中快捷功能表的水準位移。
y
[in]用戶端座標中快捷功能表的垂直位移
pWndOwner
[in]快捷方式功能表之父視窗的指標。
bOwnMessage
[in]布爾參數,指出訊息的路由方式。 如果 bOwnMessage 為 FALSE,則會使用標準 MFC 路由。 否則, pWndOwner 會接收訊息。
hmenuPopup
[in]這個方法將顯示之功能表的句柄。
bAutoDestroy
[in]布爾參數,指出功能表是否會自動終結。
bRightAlign
[in]布爾參數,指出功能表項的對齊方式。 如果 bRightAlign 為 TRUE,則功能表會靠右對齊以從右至左閱讀順序。
傳回值
如果方法成功顯示功能表,則第一個方法多載會傳回非零;否則為 0。 如果快捷功能表正確顯示,第二個方法多載會傳回 CMFCPopupMenu 的指標,否則為 NULL。
備註
這個方法類似於 CContextMenuManager::TrackPopupMenu 方法,這兩種方法都會顯示快捷方式功能表。 不過, TrackPopupMenu
會傳回所選取功能表命令的索引。
如果參數 bAutoDestroy 為 FALSE,您必須手動呼叫繼承 DestroyMenu
的方法以釋放記憶體資源。 的預設實作 ShowPopupMenu
不會使用 參數 bAutoDestroy。 它可供日後使用,或針對衍生自 類別的 CContextMenuManager
自定義類別使用。
CContextMenuManager::TrackPopupMenu
顯示指定的快捷方式功能表,並傳回所選取快捷方式功能表命令的索引。
virtual UINT TrackPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bRightAlign = FALSE);
參數
hmenuPopup
[in]這個方法所顯示之快捷方式功能表的句柄。
x
[in]用戶端座標中快捷功能表的水準位移。
y
[in]用戶端座標中快捷功能表的垂直位移。
pWndOwner
[in]快捷方式功能表之父視窗的指標。
bRightAlign
[in]布爾值參數,指出功能表項的對齊方式。 如果 bRightAlign 為 TRUE,則功能表會靠右對齊以從右至左閱讀順序。 如果 bRightAlign 為 FALSE,則功能表會靠左對齊,以供從左至右閱讀順序使用。
傳回值
用戶選擇之命令的功能表命令標識元;如果使用者關閉快捷方式功能表而不選取功能表命令,則為 0。
備註
這個方法可作為顯示快捷方式功能表的強制回應呼叫。 除非使用者關閉快捷方式功能表或選取命令,否則應用程式不會繼續執行下列程式代碼行。 您可以用來顯示快捷方式功能表 的替代方法是 CContextMenuManager::ShowPopupMenu。 該方法不是強制回應呼叫,而且不會傳回所選命令的標識碼。