Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Hallo Uwe<br>
Was meinst Du mit Deklaration eine Botschaft.<br>
Meines Wissens bezieht unter C++Builder mit Botschaften arbeiten, wenn ich zum Beispiel auf ein Formular Click DoppelClick oder darüberfahr, daß ein bestimmtes Ereignis eintritt. Diese werden auch unter Ereignisse bestimmt und im Quelltext programmiert.<br><br>
Grüße Stefa
Nein ich meinte zusätzliche eigene Botschaften, nicht die bereits durch die vcl abgedeckten. Dazu muss man sich meines Wissens nach erst mal eine eigene definieren (#define CM_OWNMESSAGE (WM_APP + 1)) und dann irgendwie mit dem Makro BEGIN_MESSAGE_MAP die Botschaftsantwortmethode mit der selbstdefinierten Botschaft verbinden. Dann kann ich nachher im Programm eine Message mit SendMessage oder PostMessage losjagen. Das ganze hakt aber bei mir irgendwie.
Könnte mir mal jemand ein Beispiel abbilden wie sowas funktioniert?
1. Du mußt unterscheiden zwischen tatsächlichen eigenen Botschaften, die es in Windows nicht gibt und Windowsbotschaften, für die von der VCL keine Rountinen bereitgestellt werden, aber in Windows vorhandnen sind.
2. #define MYMESSAGE WM_USER+1
Wenn du tatsächlich eine eigene neue Botschaft erzeugen willst
3. Der MessageHandler mit der eigenen und der Botschaft WM_ERASEBKGND, die es in Windows gibt:
<pre>
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MYMESSAGE, TMessage, OnMyMessage)
MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd,OnEraseBkgnd)
END_MESSAGE_MAP(TForm)
Tja, das wird so nicht zwischen zwei verschiedenen Anwendungen gehen.
PostMessage funktioniert nur bei den normalen Windows-Botschaften (Bsp. WM_CLOSE). Bei eigenen Botschaften müssen beide Anwendungen die "neue" Botschaft mit RegisterMessage registriere
Nein, kein Zufall, aber eine andere Methode, die so eigentlich von MS nicht vorgesehen ist. Wenn die mal eine neuen Code bei der Botschaft WM_COMMAND einführen und das ist durch Zufall dein wNotifyCode dann kracht es wohl.
Wenn du WM_COMMAND sendest ist das keine eigendefinierte Botschaft.
Du übergibst lediglich im wNotifyCode deinen Wert.
Bei einer eigendefinierten Botschaft kannst du einen eigenen Wert übergegen und hast die wParameter und lParameter frei um eigene zusätzliche Werte zu dieser Botschaft zu übergeben.
Die Funktion heisst RegisterWindowMessage (Fehler von mir).
Innerhalb EINER Anwendung (also zwischen verschiedenen Fenstern der Anwendung) ist die Registrierung nicht vonnöten.
The RegisterWindowMessage function defines a new window message that is guaranteed to be unique throughout the system. The returned message value can be used when calling the SendMessage or PostMessage function.
UINT RegisterWindowMessage(
LPCTSTR lpString // address of message string
);
Parameters
lpString
Points to a null-terminated string that specifies the message to be registered.
Return Values
If the message is successfully registered, the return value is a message identifier in the range 0xC000 through 0xFFFF.
If the function fails, the return value is zero.
Remarks
The RegisterWindowMessage function is typically used to register messages for communicating between two cooperating applications.
If two different applications register the same message string, the applications return the same message value. The message remains registered until the Windows session ends.
Only use RegisterWindowMessage when more than one application must process the same message. For sending private messages within a window class, an application can use any integer in the range WM_USER through 0x7FFF. (Messages in this range are private to a window class, not to an application. For example, predefined control classes such as BUTTON, EDIT, LISTBOX, and COMBOBOX may use values in this range.)
Comment