Поделиться через


Класс 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);

Иерархия наследования

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. ЗНАЧЕНИЕ 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] Горизонтальное смещение контекстного меню в координатах клиента.

y
[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] Горизонтальное смещение контекстного меню в координатах клиента.

y
[in] Вертикальное смещение контекстного меню в координатах клиента.

pWndOwner
[in] Указатель на родительское окно контекстного меню.

bRightAlign
[in] Логический параметр, указывающий, как выравниваются элементы меню. Если bRightAlign имеет значение TRUE, меню выровнено вправо для порядка чтения справа налево. Если bRightAlign имеет значение FALSE, меню выровнено по левому краю для порядка чтения слева направо.

Возвращаемое значение

Идентификатор команды меню команды, выбранной пользователем; 0, если пользователь закрывает контекстное меню без выбора команды меню.

Замечания

Этот метод работает в качестве модального вызова для отображения контекстного меню. Приложение не будет продолжать выполнять следующую строку в коде, пока пользователь не закроет контекстное меню или не выберет команду. Альтернативный метод, который можно использовать для отображения контекстного меню, — CContextMenuManager::ShowPopupMenu. Этот метод не является модальным вызовом и не возвращает идентификатор выбранной команды.

См. также

Диаграмма иерархии
Классы
Класс CWinAppEx