Класс 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
вручную. Платформа приложения создает 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. ЗНАЧЕНИЕ NULL, если меню не называется lpszName.
Замечания
Если этот метод находит меню, соответствующее lpszName, GetMenuByName
хранит идентификатор ресурса меню в параметре puiOrigResID.
CContextMenuManager::GetMenuNames
Возвращает список имен меню, добавленных в CContextMenuManager.
void GetMenuNames(CStringList& listOfNames) const;
Параметры
listOfNames
[out] Ссылка на параметр CStringList . Этот метод записывает список имен меню в этот параметр.
CContextMenuManager::LoadState
Загружает сведения, связанные с классом CContextMenuManager из реестра Windows.
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] Горизонтальное смещение контекстного меню в координатах клиента.
г
[in] Вертикальное смещение контекстного меню в координатах клиента
pWndOwner
[in] Указатель на родительское окно контекстного меню.
bOwnMessage
[in] Логический параметр, указывающий, как маршрутизуются сообщения. Если bOwnMessage имеет значение FALSE, используется стандартная маршрутизация MFC. В противном случае pWndOwner получает сообщения.
hmenuPopup
[in] Дескриптор меню, отображаемого этим методом.
bAutoDesk
[in] Логический параметр, указывающий, будет ли меню автоматически уничтожено.
bRightAlign
[in] Логический параметр, указывающий, как выравниваются элементы меню. Если bRightAlign имеет значение TRUE, меню выровнено вправо для порядка чтения справа налево.
Возвращаемое значение
Первая перегрузка метода возвращает ненулевое значение, если метод успешно отображает меню; в противном случае — 0. Второе перегрузка метода возвращает указатель на CMFCPopupMenu , если контекстное меню отображается правильно; в противном случае — ЗНАЧЕНИЕ NULL.
Замечания
Этот метод напоминает метод CContextMenuManager::TrackPopupMenu , в котором оба метода отображают контекстное меню. TrackPopupMenu
Однако возвращает индекс выбранной команды меню.
Если параметр bAutoDebuild имеет значение FALSE, необходимо вручную вызвать унаследованный DestroyMenu
метод, чтобы освободить ресурсы памяти. Реализация по умолчанию ShowPopupMenu
не использует параметр bAutoDesk. Он предоставляется для дальнейшего CContextMenuManager
использования или для пользовательских классов, производных от класса.
CContextMenuManager::TrackPopupMenu
Отображает указанное контекстное меню и возвращает индекс выбранной команды контекстного меню.
virtual UINT TrackPopupMenu(
HMENU hmenuPopup,
int x,
int y,
CWnd* pWndOwner,
BOOL bRightAlign = FALSE);
Параметры
hmenuPopup
[in] Дескриптор контекстного меню, отображаемого этим методом.
x
[in] Горизонтальное смещение контекстного меню в координатах клиента.
г
[in] Вертикальное смещение контекстного меню в координатах клиента.
pWndOwner
[in] Указатель на родительское окно контекстного меню.
bRightAlign
[in] Логический параметр, указывающий, как выравниваются элементы меню. Если bRightAlign имеет значение TRUE, меню выровнено вправо для порядка чтения справа налево. Если bRightAlign имеет значение FALSE, меню выровнено по левому краю для порядка чтения слева направо.
Возвращаемое значение
Идентификатор команды меню команды, выбранной пользователем; 0, если пользователь закрывает контекстное меню без выбора команды меню.
Замечания
Этот метод работает в качестве модального вызова для отображения контекстного меню. Приложение не будет продолжать выполнять следующую строку в коде, пока пользователь не закроет контекстное меню или не выберет команду. Альтернативный метод, который можно использовать для отображения контекстного меню, — CContextMenuManager::ShowPopupMenu. Этот метод не является модальным вызовом и не возвращает идентификатор выбранной команды.