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);
継承階層
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 を返しません。