![]() |
|
|
![]()
|
|
| AndreySol |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Вопрос 1.
Можно завести свое сообщение
послать его
а затем к примеру в WindowProc его обработать
Объясните какой смысл в указании строкового названия сообщения, ведь сделать if(message == WM_MY_SUPER_MESSAGE) не получится ? Вероятно надо как-то связать полученный идентификатор со строковым названием ? Вопрос 2. Если к примеру какое-то сообщение, допустим приведенное выше, будет посылаться 50000 раз в секунду, как это будет в плане нагрузки на систему ? И возможно ли вообще с такой частотой ? |
||||||
|
|||||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Если речь идет об относительно небольшом приложении, где все под контролем, смысла регистрировать сообщения нет никакого. Выдели себе пул чисел выше WM_USER и пользуйся. Или о локальных сообщениях внутри какого-либо класса.
На самом деле все сообщения в Windows - числовые. А строковые имена служат для обеспечения уникальности, причем глобальной:
И смысл они имееют только в RegisterWindowMessage. Реальным номером сообщения будет возвращенное число. И именно его ты должен использовать при ловле и обработке. Смысл регистрации сообщений со строковыми именами в регулировании доступа из разных мест. Скажем, пишешь универсальную библиотеку контролов, и не можещь себе позволить выделить пул сообщений - иначе это может вызвать проблемы у приложений-пользователей библиотеки. А так - нарисовал себе несколько сообщений с длинными значащими именами, и получил для них числовые ид-ры, причем не факт что всегда одинаковые. Или обмен сообщениями между приложениями: строковое сообщение можно зарегистрировать в нескольких приложениях. При этом ты получишь один и тот же ид-р сообщения. -------------------- ... |
|||
|
||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
А пример кода как сие сделать ? Имеется в виду допустим завести в ресурсах строковый параметр, в StringTabe наверно, а затем как-то скормить его RegisterWindowMessage ? И еще - "При этом ты получишь один и тот же ид-р сообщения" - Вы уверены в этом ? Может на это утверждение есть где-то в MSDN или SDK пояснение ? Это сообщение отредактировал(а) AndreySol - 21.1.2007, 09:59 |
|||
|
||||
| skyboy |
|
||||||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
приложение. на форму бросаешь кнопку button1.
сколько бы ты не запустил копий своего приложения, по нажатию на кнопку все(HWND_BROADCAST отсылает сообщения всем окнам системы - кто хочет, тот отработает) окна получают сообщение и убиваются. причем, в каждом окне registerwindowmessage вызывается отдельно, но с одинаковой строкой-описанием.
А почему бы просто в коде сразу не задать? зачем сложности?
Сам бы и поискал ;) по своему разумению, могу сказать, что механизм сообщений держит где-то ассоциативный список: код сообщения + описание; и когда ты хочешь зарегистрировать сообщение, сначала происходит поиск по этому списку: а нет ли там сообщения уже такого? если есть, вернется тебе уже существующий идентификатор; если нет - новый идентификатор сообщение и твоё описание будет добавлено в список. И это вполне логично, не находишь? Добавлено @ 11:03
|
||||||||||
|
|||||||||||
| AndreySol |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 772 Регистрация: 19.6.2004 Репутация: 1 Всего: 1 |
Спасибо за разъяснения, все понятно.
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |