У меня стандартное SDI приложение, создаю класс унаследованный от CView, и в нём описываю методы для обработки комманд меню (использую Class Wizard). Проблема: пункты меню неактивны, причём если делать тоже самое в сгенерированном классе С...View, то всё нормально.
Здравствуйте, Tahk, Вы писали:
T>У меня стандартное SDI приложение, создаю класс унаследованный от CView, и в нём описываю методы для обработки комманд меню (использую Class Wizard). Проблема: пункты меню неактивны, причём если делать тоже самое в сгенерированном классе С...View, то всё нормально.
А ты не забыл добавить соответствующие макросы в очередь сообщений? (BEGIN_MESSAGE_MAP ... END_MESSAGE_MAP)
Здравствуйте, Tahk, Вы писали:
T>Я сгенерировал метод ClassWizard. Так что всё есть.
Читать
статьюАвтор(ы): Поль ДиЛашиа (Paul DiLascia)
В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
.
Внимательно смотреть в рисунок №8 и текст после него...
Это объясняет одну из загадок, упомянутых в начале: почему иногда при добавлении дочернего окна пункты меню остаются серыми, даже если в карту сообщений этого окна вставлены макросы ON_COMMAND? Ответ: потому что команды в дочернее окно автоматически не направляются. Они направляются только в активное представление, документ, главное окно и приложение. Если вы хотите, чтобы произвольное дочернее окно CGizmoWnd тоже обрабатывало команды, вы должны направить их туда вручную. Не бойтесь, это просто.