2010-05-20 4 views

Antwort

2

Ja, Sie können einfach Ihre eigenen Nachrichten als eine Konstante größer als WM_USER definieren:

#define WM_MY_MESSAGE (WM_USER + 1000) 

Dann können Sie den normalen ON_COMMAND/ON_NOTIFY Makros verwenden.

Das Problem mit benutzerdefinierten Nachrichten wie diesem ist, dass andere Programme dieselbe Konstante wie Sie verwenden können. Und Sie können eine Nachricht von jemand anderem für das falsche bekommen. Um dieses Problem zu umgehen, verwenden Sie registrierte Nachrichten mit RegisterWindowMessage.

Es gibt einen guten Überblick über user defined messages/registered messages hier.

+2

Beachten Sie, dass andere Programme Ihnen keine Nachrichten mit dem 'WM_USER-0x7FFF'-Bereich senden sollen. Verdammt, sie sollen nicht einmal in einem Programm gesendet werden. Dafür haben Sie 'WM_APP-0xBFFF range'. Der WM_USER ist intern in einer Fensterklasse, kein Programm. – MSalters

1

Sie können "RegisterWindowMessage" verwenden, um neue eindeutige Nachrichten zu erstellen.

von MSDN: "Die Funktion" RegisterWindowMessage "definiert eine neue Fenstermeldung, die garantiert systemweit eindeutig ist. Der Nachrichtenwert kann beim Senden oder Veröffentlichen von Nachrichten verwendet werden."

6

Es hängt davon ab, wofür Sie die Nachricht verwenden. This link zeigt eine Aufschlüsselung des "Adressraums" für Win32-Nachrichten.

WM_USER ist nicht die richtige Lösung im allgemeinen Fall. WM_USER Nachrichten "können von einer Anwendung definiert und verwendet werden, um Nachrichten in einer privaten Fensterklasse zu senden. Diese Werte können nicht verwendet werden, um Nachrichten zu definieren, die in einer Anwendung sinnvoll sind, da einige vordefinierte Fensterklassen bereits Werte in diesem Bereich definieren."

Es ist besser, eine Nachrichten-ID zuzuweisen, die sich im Bereich WM_APP befindet.

RegisterWindowMessage ist nützlich, wenn das System Ihnen zur Laufzeit eine Nachrichten-ID zuweisen soll. "Alle Anwendungen, die denselben String registrieren, können die zugehörige Nachrichtennummer für den Nachrichtenaustausch verwenden." Sie können daher RegisterWindowMessage verwenden, wenn Sie eine benutzerdefinierte Nachricht für die einfache Kommunikation zwischen Prozessen benötigen.