MFC resource.h идентификаторы команд / сообщений - PullRequest
5 голосов
/ 03 апреля 2010

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

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

#define ID_MY_ID 101

и есть команда windows с таким же идентификатором. Когда MC отправляет эту команду в приложение, она обрабатывается как приложение, определенное ID_MY_ID, и приложение предпринимает ненужные действия. Это возможный сценарий?

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

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

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

Ответы [ 3 ]

7 голосов
/ 04 апреля 2010

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

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

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

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

1 голос
/ 04 апреля 2010

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

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

1 голос
/ 04 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...