這兩個函數的功能幾乎是一樣的,只是SendMessage是直接調用Windows函數來發送消息,只有這個消息完全被處理後此函數才返回,而PostMessage則給窗體的消息隊列增加一個消息,這個消息將在未來某個時候進行正常事件處理時得到處理。以下僅以SendMessage為例。
函數中雖然有四個參數,但關鍵的是前兩個:hwnd和wMsg。Hwnd是句柄,MicrosoftWindows應用程序中的每個窗體和控件都擁有一個句柄,通過句柄可以指明函數的操作對象;wMsg是一個十六進制數,代表了函數要發送的具體消息。
下面以具體例子說明如何用SendMessage實現“剪切”、“復制”、“粘貼”、“撤消”和“刪除”功能:
在窗體中放置一個文本框Text1和五個按鈕,分別執行以上五種功能,編寫以下程序。
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
除了TextBox外SendMessage還可以對RitchTextBox和ComboBox等進行操作,只要相應改變hwnd參數即可。