PostMessage не доходит!
От: shilon Молдова  
Дата: 30.08.02 12:53
Оценка:
[VisualC++, Win32 API, Win98, WinXP]

есть приложение с окошком и поток который генерирует PostMessage на окно,

проблема:
если окно тянуть мышкой за Caption то сообщения не приходят ! (PostMessage не показывает ошибку)

что делать ?
Re: PostMessage не доходит!
От: Alex Fedotov США  
Дата: 31.08.02 03:11
Оценка: 12 (2)
Здравствуйте shilon, Вы писали:

S>есть приложение с окошком и поток который генерирует PostMessage на окно,


S>проблема:

S> если окно тянуть мышкой за Caption то сообщения не приходят ! (PostMessage не показывает ошибку)

Сообщения не приходят, потому что они обрабатываются модальным циклом обработки сообщений, в который заходит DefWindowProc на все время перетаскивания окна.

S>что делать ?


Вариант 1. Использовать SendNotifyMessage вместо PostMessage.
Вариант 2. Поставить хук WH_GETMESSAGE на этот поток и ловить сообщения там.
-- Alex Fedotov
Re[2]: PostMessage не доходит!
От: shilon Молдова  
Дата: 31.08.02 13:15
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте shilon, Вы писали:


S>>есть приложение с окошком и поток который генерирует PostMessage на окно,


S>>проблема:

S>> если окно тянуть мышкой за Caption то сообщения не приходят ! (PostMessage не показывает ошибку)

AF>Сообщения не приходят, потому что они обрабатываются модальным циклом обработки сообщений, в который заходит DefWindowProc на все время перетаскивания окна.


S>>что делать ?


AF>Вариант 1. Использовать SendNotifyMessage вместо PostMessage.

AF>Вариант 2. Поставить хук WH_GETMESSAGE на этот поток и ловить сообщения там.

Работает, вот только почему имено SendNotifyMessage ? потамучто SendMessage тоже пашет ( доходят сообщения).
Мое окно это созданный PropertySheet (немодальн).
я раньше пытался юзал SendMessage , а соощения ловил в WinMain while { getMessage () } а потом перешол на PostMessage т.к. с ПропШитом это не работало,

теперь я поставил Хук на Диалоговую процедуру ПропШита и туда СэндМесс доходит...
Re[3]: PostMessage не доходит!
От: Alex Fedotov США  
Дата: 31.08.02 15:47
Оценка:
Здравствуйте shilon, Вы писали:

AF>>Вариант 1. Использовать SendNotifyMessage вместо PostMessage.

AF>>Вариант 2. Поставить хук WH_GETMESSAGE на этот поток и ловить сообщения там.

S>Работает, вот только почему имено SendNotifyMessage ? потамучто SendMessage тоже пашет ( доходят сообщения).


Потому что SendNotifyMessage является более точным эквивалентом PostMessage в данном случае: она возвращает управление сразу же после того, как сообщение отправлено, в то время как SendMessage дожидается пока сообщение не будет обработано. Поскольку в оригинале использовалась PostMessage, я предложил вариант, который работает, но в то же время привностит минимум изменений. Если поведение SendMessage устраивает, можно пользоваться и ей.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.