Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: COM, OLE, ActiveX
Войти
Регистрация
Восстановить пароль
 
Melamed
19 / 10 / 5
Регистрация: 07.06.2018
Сообщений: 62
1

Как определить какой пункт выбрал пользователь из контекстного меню?

07.06.2018, 12:14. Просмотров 452. Ответов 3
Метки нет (Все метки)

Контекстное меню создается следующим кодом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   IContextMenu pContextMenu
   ...
   // Создаём меню
   HMENU hPopupMenu = CreatePopupMenu();
 
   // Заполняем меню
   pContextMenu->QueryContextMenu(hPopupMenu, 0, 1, 0x7FFF, 0);
 
   // Отображаем меню
   UINT nCmd = TrackPopupMenu(hPopupMenu,
      TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD, x, y, 0, hWnd, 0);
 
   // Выполняем команду (если она была выбрана)
   if(nCmd)
   {
      CMINVOKECOMMANDINFO ici;
      ZeroMemory(&ici, sizeof(CMINVOKECOMMANDINFO));
      ici.cbSize = sizeof(CMINVOKECOMMANDINFO);
 
      ici.hwnd = hWnd;
      ici.lpVerb = MAKEINTRESOURCE(nCmd-1);
      ici.nShow = SW_SHOWNORMAL;
 
      pContextMenu->InvokeCommand(&ici);
   }
Недостатком данного кода является то, что он не запрашивает у пользователя подтверждение на выполнения потенциально опасной операций, как например, "Удаление".
Хотелось бы вывести предупреждение перед выполнением такой операции. Как я понимаю, код операции получает команда в переменной nCmd. Но чему он будет равняться в случае выбора пользователем данной операции не совсем понятно.
Заранее благодарен
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2018, 12:14
Ответы с готовыми решениями:

Как удалить пункт из контекстного меню корзины?
Доброго времени суток. Установил себе аваст. Соответственно в контекстном меню корзины появился...

Как отследить какой именно ComboBox выбрал пользователь?
В лабораторной работе есть 7 comboBox-ов, пользователь может выбирать значение начиная с любого,...

Как создать свой пункт контекстного меню Проводника, не имея права на запись в раздел HKEY_CLASSES_ROOT?
Приветствую. Таким образом создается пункт меню для файлов. Записать в этот раздел можно только...

Как сделать, чтобы при редактировании появлялся тот пункт контекстного меню, который был до этого?
Приветствую всех! Есть форма: Как сделать, чтобы при нажатии на ссылку "редактировать" появлся...

Пропал пункт контекстного меню
Доброго времени суток. Помогите, кто знает: после одной из чисток реестра у меня пропал пункт...

3
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,119
08.06.2018, 08:17 2
Melamed, может оно возвращает ID пункта?
0
Melamed
19 / 10 / 5
Регистрация: 07.06.2018
Сообщений: 62
09.06.2018, 11:35  [ТС] 3
Да он выводит идентификатор выбранного пользователем пункта меню. Вопрос такой, для стандартных пунктов меню он постоянен или нет? Если нет, то как гарантировать, что мой код сработает именно на этом пункте меню?
В документации такой гарантии я не нашел. Тем более она размывается тем обстоятельством, что программист может расширять это меню, создавая собственные COM объекты, расширяющие Shell оболочку OC Windows
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27651 / 18539 / 7314
Регистрация: 22.10.2011
Сообщений: 32,530
Записей в блоге: 6
09.06.2018, 12:04 4
Melamed, никто ж не мешает получить через IContextMenu::GetCommandString + GCS_VERBA/GCS_VERBW имя команды для выбранного пункта меню, и посмотреть, что за команда. И вот на основе этой информации уже принимать решение о необходимости подтверждения.
0
09.06.2018, 12:04
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2018, 12:04

Как определить, что пользователь ничего не выбрал в OpenFileDialog
Открываю диалог для загрузки фото, все работает и загружает, но есть одна проблема. Если не выбрать...

Добавления пункт контекстного меню windows
я прочитал несколько статей/тем, из которых ясно, что для добавления пункт контекстного меню...

2013 Исчез пункт из контекстного меню
Здрям! Был офис 2010, х86. Был макрос, который работал от кнопки: Private WithEvents...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru