Windows でプログラミングを行うと、Windows システムにすでに実装されている関数が多数あることがよくあります。これらの関数を直接呼び出すことができれば、プログラムの作成時間が大幅に節約され、プログラムの実行効率が向上します。多くの場合、「Ctrl + 」を使用できます。プログラム内でシステムのこれらの機能を呼び出すことができるため、これらの操作をどのように実装するかを心配する必要がなくなります。継続的な探索の結果、SendMessage と PostMessage がこの重要なタスクを実行できることがわかりました。これは宝物なので、友達全員に紹介するのが待ちきれません。
これら 2 つの API 関数は、VB5 の「API ブラウザ」を使用して簡単に見つけることができます。
DeclareFunctionSendMessageLib "user32" Alias "SendMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_lParamAsAny)AsLong
DeclareFunctionPostMessageLib "user32" Alias "PostMessageA"_(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,_ByVallParamAsLong)AsLong
これら 2 つの関数の機能はほぼ同じですが、SendMessage はメッセージを送信するために Windows 関数を直接呼び出しますが、PostMessage はメッセージをフォームのメッセージ キューに追加します。将来のある時点で、通常のイベント処理中に処理される予定です。以下では、SendMessage を例として取り上げます。
関数には 4 つのパラメーターがありますが、重要なのは最初の 2 つ、hwnd と wMsg です。 Hwnd はハンドルです。Microsoft Windows アプリケーションの各フォームとコントロールにはハンドルがあり、wMsg は関数によって送信される特定のメッセージを表す 16 進数です。
以下では、特定の例を使用して、SendMessage を使用して「切り取り」、「コピー」、「貼り付け」、「元に戻す」、および「削除」機能を実装する方法を示します。
上記 5 つの機能をそれぞれ実行するテキスト ボックス Text1 と 5 つのボタンをフォーム内に配置し、次のプログラムを記述します。
オプション明示的
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
hwnd パラメータを適宜変更すれば、TextBox に加えて、SendMessage は RitchTextBox や ComboBox などでも操作できます。 ->