2010-05-20 7 views

Répondre

2

Oui, vous pouvez simplement définir vos propres messages comme une constante supérieure à WM_USER:

#define WM_MY_MESSAGE (WM_USER + 1000) 

Ensuite, vous pouvez utiliser les ON_COMMAND normales/macros ON_NOTIFY. Le problème avec les messages définis par l'utilisateur est que les autres programmes peuvent utiliser la même constante que vous. Et vous pouvez recevoir un message de quelqu'un d'autre pour la mauvaise chose.

Pour résoudre ce problème, vous devez utiliser des messages enregistrés avec RegisterWindowMessage.

Voici un bon aperçu sur user defined messages/registered messages ici.

+2

Notez bien sûr que les autres programmes ne sont pas censés vous envoyer des messages avec la plage 'WM_USER-0x7FFF'. Heck, ils ne sont même pas censés être envoyés dans un programme. Pour cela vous avez 'WM_APP-0xBFFF range'. Le WM_USER est interne à une classe de fenêtre, pas un programme. – MSalters

1

Vous pouvez utiliser "RegisterWindowMessage" pour créer de nouveaux messages uniques. D'après MSDN: "La fonction RegisterWindowMessage définit un nouveau message de fenêtre qui est garanti unique dans tout le système.La valeur du message peut être utilisée lors de l'envoi ou de la publication de messages."

6

Cela dépend de ce pour quoi vous utilisez le message. This link montre une répartition de "l'espace d'adressage" pour les messages Win32.

WM_USER est pas la bonne solution dans le cas général. Ces valeurs ne peuvent pas être utilisées pour définir des messages significatifs dans une application, car certaines classes de fenêtres prédéfinies définissent déjà des valeurs dans cette plage .

Il est préférable d'attribuer un ID de message dans la plage WM_APP.

RegisterWindowMessage est utile si vous souhaitez que le système vous attribue un ID de message lors de l'exécution. Toutes les applications qui enregistrent la même chaîne peuvent utiliser le numéro de message associé pour l'échange de messages. Vous pouvez donc utiliser RegisterWindowMessage lorsque vous avez besoin d'un message personnalisé pour une communication inter-processus simple.