Ответ 1
Я не знаю, откуда взялась ваша информация. Документация MSDN сообщает:
0 через WM_USER -1
Сообщения, зарезервированные для использования системой.
WM_USER через 0x7FFF
Целочисленные сообщения для использования в классах частных окон.
WM_APP (0x8000) через 0xBFFF
Сообщения, доступные для использования приложениями.
0xC000 через 0xFFFF
Строковые сообщения для использования приложениями.
Больше, чем 0xFFFF
Зарезервировано системой.
В чем разница между диапазоном WM_USER
и диапазоном WM_APP
? Это было охвачено во многих местах. Например, вот что говорит Раймонд Чен.
0x400.. 0x7FFF (WM_USER.. WM_APP-1): сообщения, определенные классом.
Значения этих сообщений определяются разработчиком класс окна. (Неформально: лицом, которое называет RegisterClass для этот класс окна.) Например, сообщение WM_USER + 1 означает TB_ENABLEBUTTON, если окно является элементом управления панели инструментов, но это означает TTM_ACTIVATE, если это элемент управления всплывающей подсказкой, и это означает DM_SETDEFID, если это диалоговое окно. Если вы создали свой собственный контроль, это означало бы что-то совсем другое. Поскольку любой может создать сообщения в этом диапазоне, операционная система не знает, что параметры означают и не могут выполнять автоматическое сортирование.
0x8000.. 0xBFFF (WM_APP... MAXINTATOM-1): сообщения, определенные приложением.
Значения этих сообщений определяются приложением, которое создал окно. (Неофициально: лицом, которое называет CreateWindow.) Этот регион сообщений был создан в Windows 95 для обеспечения что приложения, которые подклассифицируют окно и генерируют пользовательские сообщения не будет мешать новым сообщениям, созданным классом окна в будущие версии. Опять же, поскольку любой может создать сообщение в этом диапазон, операционная система не знает, что означают параметры и не может выполнять автоматическое сортирование.
Главное, что нужно сделать из всего этого, заключается в том, что если вы определяете сообщения в диапазоне WM_USER
, тогда будьте готовы к тому, что другие элементы управления в вашем приложении будут использовать их для тех же самых сообщений. Например, вы не должны транслировать сообщения в диапазоне WM_USER
.
С другой стороны, сообщения в диапазоне WM_APP
должны иметь одинаковое значение для всех классов окон в приложении.