Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344

Как определить id пункта меню в ON_COMMAND в mfc

14.05.2023, 21:28. Показов 3256. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую. У меня есть два пункта меню,при выборе которых выполняется почти одинаковый код. Подскажите пожалуйста,как получить id нажатого пункта. Я использую макрос ON_COMMAND,т.к ON_COMMAND_RANGE предполагает,что id пунктов меню будут рядом,но один из пунктов меню использует id ID_FILE_OPEN,который я пытаюсь переопределить в resource.h,но у меня ничего хорошего не выходит. Один из пунктов меню становится disable. Ещё читал,что id нажатого пункта меню можно отслеживать в CWnd::GetCurrentMessage(),но когда я пытаюсь вызвать эту функцию (const MSG* m = CWnd::GetCurrentMessage(),у меня выдаётся ошибка компиляции:

E0265. функцию "CWnd::GetCurrentMessage" (объявлено в строке 2185 из "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.1 6.27023\atlmfc\include\afxwin.h") недоступно

В общем подскажите пожалуйста,как использовать одну функцию для обработки нажатия на два menuitem. Заранее всех благодарю за помощь.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2023, 21:28
Ответы с готовыми решениями:

Как по выбору пункта меню создать RichEdit в основном окне MFC и выводить в него текст?
Добрый день! Подскажите, пож-та, как в основном окне MFC (тип - один документ) по выбору пункта меню создать поле вывода (например,...

Добавление пункта меню MFC
Есть приложение созданное визардом, создал 2 своих меню в ресурсах, ID_MAIN_MANU(1) и ID_INFO_MENU(2) как мне добавить меню 2 к 1-ому...

Как правильно определить Тип пункта меню Jomsocial в Joomla 2.5 ?
Установила JomSocial 2.6 , в связи с этим возник вопрос: Как выбрать внутри каждого пункта меню Jomsocial Тип пункта меню чтобы все...

5
2736 / 891 / 331
Регистрация: 10.02.2018
Сообщений: 2,120
15.05.2023, 05:49
КАВ, сделайте две функции без аргументов на каждый ID. Сделайте третью функцию с аргументом для передачи ID. Из функций без аргументов вызовите третью функцию и задайте в вызовах нужный ID. Или попробуйте воспользоваться макросом ON_COMMAND_EX, по описанию он подходит для вашей задачи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CMyWnd::OnControl1()
{
  OnControl(ID_CONTROL1);
}
 
void CMyWnd::OnControl2()
{
  OnControl(ID_CONTROL2);
}
 
void CMyWnd::OnControl(WORD id)
{
  //...
}
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,146
15.05.2023, 08:50
КАВ, глянь описание CWnd::OnCommand
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
15.05.2023, 13:48  [ТС]
Нет,мне больше подходит on_command,т.к он обрабатывает сочетания клавиш для пункта меню,а мне это тоже надо. Алексей,Я прочитал описание cwnd::oncommand,но я использую макрос ON_COMMAND. Как я понимаю,с его помощью мы не можем получить id нажатого пункта меню,если не переопределить cwnd::oncommand? Кстати да,нажатого или пункта меню,который сработал,когда я нажал назначенное на него сочетание клавиш.
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,146
15.05.2023, 14:06
КАВ, ON_COMMAND* - это макросы, синтаксический сахар. В итоге всё летит в виртуальную функцию CWnd::OnCommand. Ещё нужно правильно переопределить и ловить команды
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
15.05.2023, 14:59  [ТС]
В общем решил не дурить себе головы и сделать две отдельные функции. Единственное что,почемуто on_new_command не понимает функции с перегрузкой,объявленные в h файле класса типа:
C++
1
void OnFileOpen(boolean reload=false);
Поэтому пришлось поступить так:

C++
1
2
void OnFileOpen(boolean reload);
void OnFileOpen();
Интересно почему так? Очень жаль,что в on_new_command нельзя передать значения параметров для функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2023, 14:59
Помогаю со студенческими работами здесь

Как вычислить середину высоты пункта родительского меню для выравнивания дочернего пункта
Нужно расположить открывающийся дочерний пункт меню (третьего уровня) его верхней границей по середине высоты пункта родительского меню. ...

Как реализовать закрытие меню при выборе пункта меню?
Здравствуйте! Как сделать так, чтобы мобильное меню закрывалось при выборе пункта меню? Код прилагаю ниже: ...

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

Выделение пункта меню при наведении - только текст или весь блок пункта
Всем привет.Есть меню, при наведении появляется hover но он идет строго по тексту... Можно ли его увеличить?Если да то как? Всем...

Как изменить свойство пункта меню?
Есть свой CommandBar, в нем есть меню, в меню есть текстбокс. Как средствами VBA изменять его свойства например размер или содержание?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru