Beim Programmieren unter Windows stellen wir häufig fest, dass das Windows-System viele Funktionen bereits implementiert hat. Wenn diese direkt aufgerufen werden können, kann dies viel Programmschreibaufwand ersparen und die Ausführungseffizienz des Programms verbessern. In vielen Fällen können wir „Strg +“ verwenden. Da wir diese Funktionen des Systems in einem Programm aufrufen können, müssen wir uns nicht mehr darum kümmern, wie diese Vorgänge implementiert werden. Nach ständiger Erkundung habe ich endlich herausgefunden, dass SendMessage und PostMessage diese wichtige Aufgabe übernehmen können. Es ist ein Schatz, also kann ich es kaum erwarten, sie allen meinen Freunden vorzustellen.
Diese beiden API-Funktionen können mit dem „API-Browser“ von VB5 leicht gefunden werden:
DeclareFunctionSendMessageLib „user32“ Alias „SendMessageA“_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib „user32“ Alias „PostMessageA“_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
Die Funktionen dieser beiden Funktionen sind nahezu identisch, mit der Ausnahme, dass SendMessage die Windows-Funktion zum Senden der Nachricht direkt aufruft. Diese Funktion kehrt erst zurück, nachdem die Nachricht vollständig verarbeitet wurde, während PostMessage eine Nachricht zur Nachrichtenwarteschlange des Formulars hinzufügt wird irgendwann in der Zukunft während der normalen Ereignisbehandlung behandelt. Im Folgenden wird SendMessage nur als Beispiel verwendet.
Obwohl die Funktion vier Parameter enthält, sind die ersten beiden die wichtigsten: hwnd und wMsg. Hwnd ist ein Handle. Jedes Formular und Steuerelement in einer Microsoft Windows-Anwendung verfügt über ein Handle, das das Operationsobjekt der Funktion angeben kann.
Im Folgenden wird anhand konkreter Beispiele veranschaulicht, wie Sie mit SendMessage die Funktionen „Ausschneiden“, „Kopieren“, „Einfügen“, „Rückgängig“ und „Löschen“ implementieren:
Platzieren Sie ein Textfeld Text1 und fünf Schaltflächen im Formular, um jeweils die oben genannten fünf Funktionen auszuführen, und schreiben Sie das folgende Programm.
OptionExplicit
PRivateDeclareFunctionSendMessageLib „user32“ Alias „SendMessageA“_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
ConstWM_CUT=&H300
ConstWM_COPY=&H301
ConstWM_PAST=&H302
ConstWM_CLEAR=&H303
ConstWM_UNDO=&H304
DimfbAsLong
PrivateSubcmdClear_Click()
fb=PostMessage(Text1.hwnd,WM_CLEAR,0,0)
EndSub
PrivateSubcmdCopy_Click()
fb=SendMessage(Text1.hwnd,WM_COPY,0,0)
EndSub
PrivateSubcmdCut_Click()
fb=SendMessage(Text1.hwnd,WM_CUT,0,0)
EndSub
PrivateSubcmdPast_Click()
fb=SendMessage(Text1.hwnd,WM_PAST,0,0)
EndSub
PrivateSubcmdUndo_Click()
fb=SendMessage(Text1.hwnd,WM_UNDO,0,0)
EndSub
Zusätzlich zu TextBox kann SendMessage auch mit RitchTextBox, ComboBox usw. arbeiten, sofern der hwnd-Parameter entsprechend geändert wird. ->