次の方法で共有


CContextMenuManager クラス

CContextMenuManager オブジェクトは、ショートカット メニュー (コンテキスト メニューとも呼ばれます) を管理します。

構文

class CContextMenuManager : public CObject

メンバー

パブリック コンストラクター

名前 説明
CContextMenuManager::CContextMenuManager CContextMenuManager オブジェクトを構築します。
CContextMenuManager::~CContextMenuManager デストラクターです。

パブリック メソッド

名前 説明
CContextMenuManager::AddMenu 新しいショートカット メニューを追加します。
CContextMenuManager::GetMenuById 指定されたリソース ID に関連付けられているメニューへのハンドルを返します。
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 オブジェクトに新しいポップアップ メニューが表示されたときにアクティブなポップアップ メニューを閉じないようにする方法を示します。 このコード スニペットは、 Custom Pages サンプルの一部です。

// The GetContextMenuManager method is inherited from the CWinAppEx class.
GetContextMenuManager()->AddMenu(_T("My menu"), IDR_CONTEXT_MENU);
GetContextMenuManager()->SetDontCloseActiveMenu(true);

継承階層

CObject

CContextMenuManager

要件

Header: afxcontextmenumanager.h

CContextMenuManager::AddMenu

CContextMenuManager に新しいショートカット メニューを追加します。

BOOL AddMenu(
    UINT uiMenuNameResId,
    UINT uiMenuResId);

BOOL AddMenu(
    LPCTSTR lpszName,
    UINT uiMenuResId);

パラメーター

uiMenuNameResId
[in]新しいメニューの名前を含む文字列のリソース ID。

uiMenuResId
[in]メニュー リソース ID。

lpszName
[in]新しいメニューの名前を含む文字列。

戻り値

メソッドが成功した場合は 0 以外。メソッドが失敗した場合は 0。

解説

このメソッドは、 uiMenuResId が無効な場合、または同じ名前の別のメニューが既に CContextMenuManagerにある場合に失敗します。

CContextMenuManager::CContextMenuManager

CContextMenuManager オブジェクトを構築します。

CContextMenuManager();

解説

ほとんどの場合、 CContextMenuManager を手動で作成しないでください。 アプリケーションのフレームワークによって、 CContextMenuManager オブジェクトが作成されます。 アプリケーションの初期化中 CWinAppEx::InitContextMenuManager を呼び出す必要があります。 コンテキスト マネージャーへのポインターを取得するには、 CWinAppEx::GetContextMenuManager を呼び出します。

CContextMenuManager::GetMenuById

特定のリソース ID に関連付けられているメニューへのハンドルを返します。

HMENU GetMenuById(UINT nMenuResId) const;

パラメーター

nMenuResId
[in]メニューのリソース ID。

戻り値

関連付けられているメニューへのハンドル。メニューが見つからない場合は NULL

CContextMenuManager::GetMenuByName

特定のメニューへのハンドルを返します。

HMENU GetMenuByName(
    LPCTSTR lpszName,
    UINT* puiOrigResID = NULL) const;

パラメーター

lpszName
[in]取得するメニューの名前を含む文字列。

puiOrigResID
[out]UINT へのポインター。 このパラメーターには、指定したメニューのリソース ID (見つかった場合) が含まれます。

戻り値

lpszNameで指定された名前と一致するメニューへのハンドル。 lpszName というメニューがない場合は NULL。

解説

このメソッドが lpszNameに一致するメニューを見つけた場合、 GetMenuByName はパラメーター puiOrigResIDにメニュー リソース ID を格納します。

CContextMenuManager::GetMenuNames

CContextMenuManager に追加されたメニュー名の一覧を返します。

void GetMenuNames(CStringList& listOfNames) const;

パラメーター

listOfNames
[out] CStringList パラメーターへの参照。 このメソッドは、メニュー名の一覧をこのパラメーターに書き込みます。

CContextMenuManager::LoadState

CContextMenuManager クラスに関連付けられている情報を Windows レジストリから読み込みます。

virtual BOOL LoadState(LPCTSTR lpszProfileName = NULL);

パラメーター

lpszProfileName
[in] レジストリ キーの相対パスを含む文字列。

戻り値

メソッドが成功した場合は 0 以外。それ以外の場合は 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 以外。それ以外の場合は 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]このメソッドが表示するメニューのリソース ID。

x
[in]クライアント座標のショートカット メニューの水平方向のオフセット。

y
[in]クライアント座標のショートカット メニューの垂直方向のオフセット

pWndOwner
[in]ショートカット メニューの親ウィンドウへのポインター。

bOwnMessage
[in]メッセージのルーティング方法を示すブール型パラメーター。 OwnMessage が FALSE の場合は、標準 MFC ルーティングが使用されます。 それ以外の場合、 pWndOwner はメッセージを受信します。

hmenuPopup
[in]このメソッドが表示するメニューのハンドル。

bAutoDestroy
[in]メニューが自動的に破棄されるかどうかを示すブール型パラメーター。

bRightAlign
[in]メニュー項目の配置方法を示すブール型パラメーター。 bRightAlign が TRUE の場合、メニューは右から左への読み取り順序に合わせて右揃えになります。

戻り値

メソッドがメニューを正常に表示した場合、最初のメソッドオーバーロードは 0 以外の値を返します。それ以外の場合は 0。 2 番目のメソッド オーバーロードは、ショートカット メニューが正しく表示される場合は 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 の場合、メニューは左から右への読み取り順序で左揃えになります。

戻り値

ユーザーが選択するコマンドのメニュー コマンド ID。ユーザーがメニュー コマンドを選択せずにショートカット メニューを閉じる場合は 0。

解説

このメソッドは、ショートカット メニューを表示するモーダル呼び出しとして機能します。 ユーザーがショートカット メニューを閉じるか、コマンドを選択するまで、アプリケーションはコード内の次の行に進まない。 ショートカット メニューの表示に使用できる別の方法として、 CContextMenuManager::ShowPopupMenuがあります。 このメソッドはモーダル呼び出しではなく、選択したコマンドの ID を返しません。

関連項目

階層図
クラス
CWinAppEx クラス