Посылка сообщений классу CCmdTarget
От: visual_wind  
Дата: 19.07.04 09:47
Оценка:
Существует ли возможность послать сообщение классу CCmdTarget? Он имеет карту сообщений, однако функции доступа к ней имеются только у наследников у CWnd — PostMessage и SendMessage, у CWinThread — PostThreadMessage.
Насколько я понимаю, единственный вариант — передача отправителю сообщения указателя на CCmdTarget и вызов через него OnCmdMsg напрямую. Но как добавить сообщение в очередь сообщений класса CCmdTarget?
Передать сообщение API-функциями SendMessage, PostMessage, PostThreadMessage нельзя — для них требуется какой-либо идентификатор — хэндл окна или идентификатор потока. В данном случае такого идентификатора нет. Можно ли обойти это ограничение?
Re: Посылка сообщений классу CCmdTarget
От: rus blood Россия  
Дата: 19.07.04 10:15
Оценка: 2 (1)
Здравствуйте, 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.
.
Имею скафандр — готов путешествовать!
Re[2]: Посылка сообщений классу CCmdTarget
От: Аноним  
Дата: 19.07.04 15:41
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Послать сообщение можно только в поток. При этом можно указывать окно-получатель в этом потоке (SendMessage, PostMessage) или не указывать (PostThreadMessage). Очередь сообщений существует в потоке, и не привязана к какому-то отдельному объекту, созданному в этом потоке (например, окну).


RB>Ты отправляешь сообщение в поток, MFC его ловит, и начинает пропускать через карты сообщений.

RB>Почитать о такой маршрутизации сообщений можно здесь
Автор(ы): Поль ДиЛашиа (Paul DiLascia)

В статье даётся исчерпывающее описание механизмов маршрутизации сообщений и команд в MFC. Автор прослеживает путь сообщения с момента получения и до попадания в соответствующий обработчик, объясняет механизм работы карт сообщений, обработку команд и уведомлений, а также обновление объектов пользовательского интерфейса при помощи сообщений CN_UPDATE_COMMAND_UI. Прочитав статью, вы сможете решить практически любую проблему, связанную с обработкой сообщений в MFC.
.



Благодарю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.