schlüsselwort frage
-
Hallo
wo für ist das schlüssewort reinterpret_cast
LPMIDIEVENT lpEvent = reinterpret_cast<LPMIDIEVENT>(wParam);
kennst sich da jemand damit aus?
Grüße Can
-
Hallo,
ein solcher cast wird eingesetzt, um Typen zu konvertieren, die eigentlich nichts miteinander zu tun haben. Ein wParam z.B. ist ein Integer-Typ, aber ein LPMIDIEVENT ist ein Zeiger auf eine MIDIEVENT-Struktur, also verschiedene Typen, die ohne diesen cast nicht einander zugewiesen werden können. D.h., es wird durch
reinterpret_cast<LPMIDIEVENT>(wParam);erzwungen, daß der in wParam liegende Wert re- bzw. neu-interpretiert wird als Zeiger auf eine MIDIEVENT-Struktur.
Eine Übersicht für die C++-cast-Mechanismen gibt es z.B. hier:
http://www.cpp-tutor.de/cpp/le04/le04_01.htm
MfG
-
Hallo Probe-Nutzer
Hertzlichen dank für deine Antwort!!
Wo sieht man an diesem code das es mit eine WM-Nachricht in verbindung steht.
auser das es im kommentar beschriben ist? ich möchte auch eine selbst definierte WM_Nachricht senden ( auslösen) ich bekomme es nicht hin.Grüße Can
LRESULT CMidiTestDlg::OnMidiEvent(WPARAM wParam, LPARAM lParam)
{
//diese Funktion wird durch die WM_MYMIDIIN_EVENT Nachricht ausgelößt, der WPARAM beinhaltet
//dabei den Pointer aud das lpEvent, welches nun hier in dieser Klasse verwendet werden kann.
LPMIDIEVENT lpEvent = reinterpret_cast<LPMIDIEVENT>(wParam);MidiIn.EchoOut->Put(lpEvent);
pEvent.data1 = lpEvent->data1 +3;
pEvent.data2 = lpEvent->data2;
pEvent.data3 = lpEvent->data3;
pEvent.status = lpEvent->status + 2;
pEvent.time = lpEvent->time;
// MidiIn.EchoOut->Put(&pEvent);
return 0;
}
-
an der Bezeichnung WM_MYMIDIIN_EVENT kann man erkennen, daß es sich um eine benutzerdefinierte Nachricht und keine in MFC vordefinierte handelt. Die Verbindung zwischen Nachrichten und deren Behandlungs-Funktionen wird in den MFC über die Message-Maps hergestellt (davon solltest du, wenn du dich mit MFC schon etwas beschäfigt hast, schon gehört haben, es ist eines der zentralen Konzepte). Also suche doch einfach in der Message-Map nach dem Bezeichner WM_MYMIDIIN_EVENT, und du erkennst das dafür zuständige Makro, womit die Verbindung hergestellt wird. Analog kannst du dann auch selber Nachrichten mit dem entsprechenden Handler festlegen, siehe auch:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_on_message.asp
und bei noch mehr Interesse am Thema die "technical note" dazu:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfcnotes_tn006.asp
MfG