Существует ли возможность послать сообщение классу CCmdTarget? Он имеет карту сообщений, однако функции доступа к ней имеются только у наследников у CWnd — PostMessage и SendMessage, у CWinThread — PostThreadMessage.
Насколько я понимаю, единственный вариант — передача отправителю сообщения указателя на CCmdTarget и вызов через него OnCmdMsg напрямую. Но как добавить сообщение в очередь сообщений класса CCmdTarget?
Передать сообщение API-функциями SendMessage, PostMessage, PostThreadMessage нельзя — для них требуется какой-либо идентификатор — хэндл окна или идентификатор потока. В данном случае такого идентификатора нет. Можно ли обойти это ограничение?
Здравствуйте, visual_wind, Вы писали:
_> Существует ли возможность послать сообщение классу CCmdTarget? Он имеет карту сообщений, однако функции доступа к ней имеются только у наследников у CWnd — PostMessage и SendMessage, у CWinThread — PostThreadMessage.
_> Насколько я понимаю, единственный вариант — передача отправителю сообщения указателя на CCmdTarget и вызов через него OnCmdMsg напрямую. Но как добавить сообщение в очередь сообщений класса CCmdTarget?
_> Передать сообщение API-функциями SendMessage, PostMessage, PostThreadMessage нельзя — для них требуется какой-либо идентификатор — хэндл окна или идентификатор потока. В данном случае такого идентификатора нет. Можно ли обойти это ограничение?
Послать сообщение можно только в поток. При этом можно указывать окно-получатель в этом потоке (SendMessage, PostMessage) или не указывать (PostThreadMessage). Очередь сообщений существует в потоке, и не привязана к какому-то отдельному объекту, созданному в этом потоке (например, окну).
Ты отправляешь сообщение в поток, MFC его ловит, и начинает пропускать через карты сообщений.
Почитать о такой маршрутизации сообщений можно
здесьАвтор(ы): Поль ДиЛашиа (Paul DiLascia)
В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
.
Здравствуйте, rus blood, Вы писали:
RB>Послать сообщение можно только в поток. При этом можно указывать окно-получатель в этом потоке (SendMessage, PostMessage) или не указывать (PostThreadMessage). Очередь сообщений существует в потоке, и не привязана к какому-то отдельному объекту, созданному в этом потоке (например, окну).
RB>Ты отправляешь сообщение в поток, MFC его ловит, и начинает пропускать через карты сообщений.
RB>Почитать о такой маршрутизации сообщений можно здесьАвтор(ы): Поль ДиЛашиа (Paul DiLascia)
В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
.
Благодарю.