При программировании под Windows мы часто обнаруживаем, что в системе Windows уже реализовано множество функций. Если их можно вызвать напрямую, это может сэкономить много времени на написании программы и повысить эффективность ее работы. Во многих случаях мы можем использовать «Ctrl+». Возможность вызова этих функций системы в программе избавляет от необходимости беспокоиться о том, как реализовать эти операции. После постоянных исследований я наконец обнаружил, что SendMessage и PostMessage могут взять на себя эту важную задачу. Это сокровище, поэтому мне не терпится представить их всем своим друзьям.
Эти две функции API можно легко найти с помощью «API-браузера» VB5:
DeclareFunctionSendMessageLib "user32" Псевдоним "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib "user32" Псевдоним "PostMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
Функции этих двух функций практически одинаковы, за исключением того, что SendMessage напрямую вызывает функцию Windows для отправки сообщения. Эта функция возвращает значение только после полной обработки сообщения, а PostMessage добавляет сообщение в очередь сообщений формы This message. будет обработано во время обычной обработки событий когда-нибудь в будущем. Ниже в качестве примера используется только SendMessage.
Хотя в функции четыре параметра, ключевыми являются первые два: hwnd и wMsg. Hwnd — это дескриптор. Каждая форма и элемент управления в приложении Microsoft Windows имеют дескриптор. Дескриптор может указывать объект операции функции; wMsg — это шестнадцатеричное число, которое представляет конкретное сообщение, которое должно быть отправлено функцией.
Ниже приведены конкретные примеры, иллюстрирующие, как использовать SendMessage для реализации функций «вырезать», «копировать», «вставить», «отменить» и «удалить»:
Поместите в форму текстовое поле «Текст1» и пять кнопок для выполнения указанных выше пяти функций соответственно и напишите следующую программу.
OptionExplicit
PRivateDeclareFunctionSendMessageLib "user32" Псевдоним "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
Помимо TextBox, SendMessage также может работать с RitchTextBox, ComboBox и т. д., если параметр hwnd изменен соответствующим образом. ->