¿Cómo puedo definir mi propio mensaje WM (como WM_CLOSE, etc.) que puede ser manejado por la bomba de mensajes en C++?Defina su propio mensaje WM para Message Pump en C++
Si eso es posible.
¿Cómo puedo definir mi propio mensaje WM (como WM_CLOSE, etc.) que puede ser manejado por la bomba de mensajes en C++?Defina su propio mensaje WM para Message Pump en C++
Si eso es posible.
Sí se puede simplemente definir sus propios mensajes como una constante mayor que WM_USER:
#define WM_MY_MESSAGE (WM_USER + 1000)
continuación, puede utilizar las macros normales ON_COMMAND/ON_NOTIFY.
El problema con los mensajes definidos por el usuario como este es que otros programas pueden usar la misma constante que usted. Y puede recibir un mensaje de otra persona por algo equivocado.
Para superar este problema, utilizaría los mensajes registrados con RegisterWindowMessage.
Hay un buen resumen en user defined messages/registered messages aquí.
Puede usar "RegisterWindowMessage" para crear nuevos mensajes únicos.
de MSDN: "La función RegisterWindowMessage define un nuevo mensaje de ventana que garantiza que será único en todo el sistema. El valor del mensaje se puede utilizar al enviar o publicar mensajes."
Depende de lo que está utilizando el mensaje para. This link muestra un desglose del "espacio de direcciones" para los mensajes de Win32.
WM_USER
es no la solución correcta en el caso general. WM_USER
mensajes "pueden ser definidos y utilizados por una aplicación para enviar mensajes dentro de una clase de ventana privada. Estos valores no pueden usarse para definir mensajes significativos en una aplicación, porque algunas clases de ventana predefinidas ya definen valores en este rango".
Es mejor que asigne un ID de mensaje que se encuentre en el rango WM_APP
.
RegisterWindowMessage
es útil si desea que el sistema le asigne un ID de mensaje en tiempo de ejecución. "Todas las aplicaciones que registran la misma cadena pueden usar el número de mensaje asociado para intercambiar mensajes", para que pueda usar RegisterWindowMessage
cuando necesite usar un mensaje personalizado para una comunicación entre procesos simple.
Nota: por supuesto, se supone que otros programas no deben enviarle mensajes con el rango 'WM_USER-0x7FFF'. Diablos, ni siquiera se supone que sean enviados _con_ un programa. Para eso tienes 'WM_APP-0xBFFF range'. WM_USER es interno a una clase de ventana, no a un programa. – MSalters