C# では、プログラムで使用されるドライバーは、元のメッセージ駆動型ではなくイベント駆動型です。.net フレームワークによって提供されるイベントはすでに非常に豊富ですが、以前のシステムで定義されたリッチ メッセージは、これは便利な実装方法を提供するため、C# でメッセージを使用するとプログラミング効率が大幅に向上する場合があります。 1 メッセージを定義する
C# では、
const int WM_Lbutton = 0x201; のように、メッセージを Windows システムのオリジナルの 16 進数として定義する必要があります
public const int USER = 0x0400 // Windowsシステムで定義されたユーザーメッセージです
2 メッセージ送信[DllImport("User32.dll",EntryPoint="SendMessage")] private static extern int SendMessage( int hWnd, // handle to destination window int Msg, // message int wParam, // first message parameter int lParam // second message parameter );
C# では、どのウィンドウにも defproc 関数というメッセージの受信と処理関数があります
メッセージを処理するフォームでこの関数をオーバーロードできます
protected override void DefWndProc ( ref System.WinForms.Message m ) { switch(m.msg) { case WM_Lbutton : ///string与MFC中的CString的Format函数的使用方法有所不同 string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam); MessageBox.Show(message);///显示一个消息框 break; default: base.DefWndProc(ref m);///调用基类函数处理非自定义消息。 break; } }
実際、C# ではイベントシステム メッセージもカプセル化されます。DefWndProc 関数で
を処理しない場合は、メッセージを処理するためにシステムに渡され、システムはプロキシを介してマウス クリック処理関数を実装します。
defproc 関数メッセージを通じてインターセプトできます。たとえば、特定のボタンのクリック メッセージをインターセプトしたい場合があります
4 C# のその他のメッセージ処理メソッド
C# では、メッセージを前処理する必要がある場合があります。たとえば、owc のスプレッドシート コントロールを使用して Excel ファイルを処理する場合、ユーザーが自由に編集するために
データを選択できないようにする場合、この時点でマウス イベントをブロックできます。システムによって事前定義されたイベントをインターセプトする必要があります (これを MFC ではサブクラス化と呼びます)。C#IMessageFilter
public class Form1: System.Windows.Forms.Form,IMessageFilter { const int WM_MOUSEMOVE = 0x200 public bool PreFilterMessage(ref Message m) { Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode; if(m.Msg == m.Msg==WM_MOUSEMOVE) //||m.Msg == WM_LBUTTONDOWN { //MessageBox.Show("Ignoring Escape..."); return true; } return false; } }
以上がC# で SendMessage を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。