2010-05-20 11 views

Respuesta

2

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í.

+2

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

1

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."

6

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.

Cuestiones relacionadas