Allgemein
Pointer in Messages weitergeben ist ganz einfach, wenn man folgendes beachtet:
SendMessage: Referenzierung von Objekten auf dem Stack, im statischen Speicher und auf dem Heap möglich
PostMessage: nur Referenzierung von Objekten im statischen Speicher und auf dem Heap möglich
Sender
// Handle auf eine bel. Form HANDLE hForm = ...; // einen Dateinamen zusammenbauen char pcFileName[MAX_PATH]; strcpy(pcFileName, "c:\\test.txt"); // Nachricht WM_MAKESCREENSHOT absetzen und auf Ausführung warten SendMessage(hMainForm, WM_MAKESCREENSHOT, 0, (LPARAM)&pcFileName);
Empfänger
void TfrmMain::MMakeScreenShot(TMessage M) { TForm::Dispatch(&M); // Zeiger in LParam auslesen und in den gewünschten Typ wandeln char *pcFileName = (char*)M.LParam; AnsiString sFileName(pcFileName); MessageDlg(sFileName, mtInformation, TMsgDlgButtons() << mbOK, 0); }
- Weiterführender Link: Passing pointers in messages