分享方式:


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。 如果您要在不先接收使用者輸入的情況下顯示選單, 請呼叫 ShowPopupMenuTrackPopupMenu 當您要建立選單並等候使用者輸入時, 會使用 。 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);

繼承階層架構

CObject

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 。 應用程式的架構會 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::GetRegistryBaseCWinAppEx::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::GetRegistryBaseCWinAppEx::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。 該方法不是強制回應呼叫,而且不會傳回所選命令的標識碼。

另請參閱

階層架構圖表
類別
CWinAppEx 類別