Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
25 / 13 / 8
Регистрация: 07.06.2018
Сообщений: 92
1

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

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

Author24 — интернет-сервис помощи студентам
Контекстное меню создается следующим кодом:

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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.06.2018, 12:14
Ответы с готовыми решениями:

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

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

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

3
Модератор
 Аватар для vxg
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,428
08.06.2018, 08:17 2
Melamed, может оно возвращает ID пункта?
0
25 / 13 / 8
Регистрация: 07.06.2018
Сообщений: 92
09.06.2018, 11:35  [ТС] 3
Да он выводит идентификатор выбранного пользователем пункта меню. Вопрос такой, для стандартных пунктов меню он постоянен или нет? Если нет, то как гарантировать, что мой код сработает именно на этом пункте меню?
В документации такой гарантии я не нашел. Тем более она размывается тем обстоятельством, что программист может расширять это меню, создавая собственные COM объекты, расширяющие Shell оболочку OC Windows
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33103 / 21400 / 8217
Регистрация: 22.10.2011
Сообщений: 36,728
Записей в блоге: 9
09.06.2018, 12:04 4
Melamed, никто ж не мешает получить через IContextMenu::GetCommandString + GCS_VERBA/GCS_VERBW имя команды для выбранного пункта меню, и посмотреть, что за команда. И вот на основе этой информации уже принимать решение о необходимости подтверждения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2018, 12:04
Помогаю со студенческими работами здесь

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

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

Убрать пункт контекстного меню
Доброго времени суток. Установил QTTabBar и как следствие появился пункт в контекстном меню "настроить папку". Хочу от него...

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

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


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru