MFC resource.h команда/идентификаторы сообщений

Я работаю над приложением MFC, которое стало довольно грязным за годы и по различным командам разработчиков. resource.h файл, который содержит все отображения команды/сообщения, становился довольно большим со временем и имеет много проблем (как дублирующиеся идентификаторы). Я не являюсь опытным с MFC, таким образом, вопрос мог бы звучать довольно глупым...

Документы MSDN упоминают, что идентификаторы Команды и Идентификаторы сообщений не должны быть меньше, чем WM_USER и WM_APP соответственно. Я видел, что большая часть команды ID в resource.h, сгенерированном Visual Studio, начинает приблизительно 100. Разве это не должно вызывать некоторое вмешательство с командами MFC/Windows и сообщениями, то перекрытие с приложением определило идентификаторы? Например, у меня есть команда ID:

#define ID_MY_ID 101

и существует команда окон, которая имеет тот же идентификатор. То, когда MC отправляет эту команду в APP, это обрабатывается как приложение, определило ID_MY_ID, и приложение принимает ненужные меры. Действительно ли это - возможный сценарий?

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

Обновление 1:

Новый вопрос обнаружился: Каков предпочтительный способ добавить новые пользовательские команды к классам приложений? Как я понял, прежде чем они были добавлены следующим образом: добавьте команду ID к resouce.h и затем добавьте обработчик карт отображения сообщений к классу обработки.

5
задан ak. 4 April 2010 в 10:38
поделиться

3 ответа

Вы смешиваете две вещи:

  1. Идентификаторы сообщений. Они должны быть больше WM_USER. Идентификаторы сообщений не определены в resource.h. Судя по вашему описанию, вы не используете личные сообщения приложения.
  2. ID команд. Само ваше приложение не должно иметь повторяющихся идентификаторов команд. Значения идентификаторов команд также не должны противоречить стандартным идентификаторам MFC, определенным в afxres.h. Эти идентификаторы команд начинаются с 0xE100, поэтому маловероятно, что значения в resource.h. Компилятор ресурсов сгенерирует ошибку для повторяющихся идентификаторов в вашем rc-файле

Вероятно, вам нет необходимости редактировать resource.h вручную.

Я бы рекомендовал использовать инструмент «Символы ресурсов» (щелкните правой кнопкой мыши ресурсы в представлении ресурсов и выберите из всплывающего меню, я предполагаю, что вы используете VC ++), чтобы удалить все неиспользуемые идентификаторы из resource.h.

7
ответ дан 14 December 2019 в 01:05
поделиться

командные сообщения отправляются в WM_COMMAND с идентификатором команды в параметре, поэтому он не будет конфликт других сообщений.

1
ответ дан 14 December 2019 в 01:05
поделиться

Как правило, нет необходимости вставлять или редактировать идентификаторы в ресурсах вручную (идентификаторы, присваиваемые VS автоматически и правильно). В некоторых случаях требуется ручное вмешательство в идентификаторы, но вы можете начать с предположения, что предыдущие команды разработчиков с ресурсами работали правильно. Так что, если вы не столкнулись с проблемой из-за ресурсов, держите их нетронутыми (ИМХО).

«В документах MSDN упоминается, что идентификаторы команд и сообщений не должны быть меньше WM_USER и WM_APP соответственно». - Похоже, вы что-то перепутали.

1
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: