Как я определяю свой собственный WM (как WM_CLOSE, и т.д.) сообщение, которое может быть обработано насосом сообщения в C++?
Если это даже возможно.
Это зависит от того, для чего вы используете сообщение. Эта ссылка показывает разбивку «адресного пространства» для сообщений Win32.
WM_USER
является не правильным решением в общем случае. Сообщения WM_USER
"могут быть определены и использованы приложением для отправки сообщений в рамках частного класса окна. Эти значения не могут использоваться для определения сообщений, которые имеют смысл во всем приложении, поскольку некоторые предопределенные классы окон уже определить значения в этом диапазоне . "
Вам лучше назначить идентификатор сообщения, который находится в диапазоне WM_APP
.
RegisterWindowMessage
полезно, если вы хотите, чтобы система назначила вам идентификатор сообщения во время выполнения. «Все приложения, которые регистрируют одну и ту же строку, могут использовать связанный номер сообщения для обмена сообщениями», поэтому вы можете использовать RegisterWindowMessage
, когда вам нужно использовать настраиваемое сообщение для простого взаимодействия между процессами.
Вы можете использовать "RegisterWindowMessage" для создания новых уникальных сообщений.
из MSDN: «Функция RegisterWindowMessage определяет новое оконное сообщение, которое гарантированно будет уникальным во всей системе. Значение сообщения может использоваться при отправке или отправке сообщений».
Да, вы можете просто определить свои собственные сообщения как константу больше WM_USER:
#define WM_MY_MESSAGE (WM_USER + 1000)
Затем вы можете использовать обычные макросы ON_COMMAND / ON_NOTIFY.
Проблема с пользовательскими сообщениями, подобными этому, заключается в том, что другие программы могут использовать ту же константу, что и вы. И вы можете получить сообщение от кого-то не по тому поводу.
Чтобы решить эту проблему, вы должны использовать зарегистрированные сообщения с помощью RegisterWindowMessage .
Здесь есть хорошее изложение пользовательских / зарегистрированных сообщений .