Определите собственное сообщение WM для сообщения Насос в C++

Как я определяю свой собственный WM (как WM_CLOSE, и т.д.) сообщение, которое может быть обработано насосом сообщения в C++?

Если это даже возможно.

5
задан Tony The Lion 20 May 2010 в 14:42
поделиться

3 ответа

Это зависит от того, для чего вы используете сообщение. Эта ссылка показывает разбивку «адресного пространства» для сообщений Win32.

WM_USER является не правильным решением в общем случае. Сообщения WM_USER "могут быть определены и использованы приложением для отправки сообщений в рамках частного класса окна. Эти значения не могут использоваться для определения сообщений, которые имеют смысл во всем приложении, поскольку некоторые предопределенные классы окон уже определить значения в этом диапазоне . "

Вам лучше назначить идентификатор сообщения, который находится в диапазоне WM_APP .

RegisterWindowMessage полезно, если вы хотите, чтобы система назначила вам идентификатор сообщения во время выполнения. «Все приложения, которые регистрируют одну и ту же строку, могут использовать связанный номер сообщения для обмена сообщениями», поэтому вы можете использовать RegisterWindowMessage , когда вам нужно использовать настраиваемое сообщение для простого взаимодействия между процессами.

6
ответ дан 14 December 2019 в 01:03
поделиться

Вы можете использовать "RegisterWindowMessage" для создания новых уникальных сообщений.

из MSDN: «Функция RegisterWindowMessage определяет новое оконное сообщение, которое гарантированно будет уникальным во всей системе. Значение сообщения может использоваться при отправке или отправке сообщений».

1
ответ дан 14 December 2019 в 01:03
поделиться

Да, вы можете просто определить свои собственные сообщения как константу больше WM_USER:

#define WM_MY_MESSAGE (WM_USER + 1000)

Затем вы можете использовать обычные макросы ON_COMMAND / ON_NOTIFY.

Проблема с пользовательскими сообщениями, подобными этому, заключается в том, что другие программы могут использовать ту же константу, что и вы. И вы можете получить сообщение от кого-то не по тому поводу.

Чтобы решить эту проблему, вы должны использовать зарегистрированные сообщения с помощью RegisterWindowMessage .

Здесь есть хорошее изложение пользовательских / зарегистрированных сообщений .

2
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: