Определить собственное сообщение WM для Pump Pump in C ++ - PullRequest
5 голосов
/ 20 мая 2010

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

Если это вообще возможно.

Ответы [ 3 ]

6 голосов
/ 20 мая 2010

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

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

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

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

2 голосов
/ 20 мая 2010

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

#define WM_MY_MESSAGE (WM_USER + 1000)

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

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

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

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

1 голос
/ 20 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...