ホームページ  >  記事  >  バックエンド開発  >  C# で SendMessage を使用するにはどうすればよいですか?

C# で SendMessage を使用するにはどうすればよいですか?

零下一度
零下一度オリジナル
2017-07-03 17:01:062863ブラウズ

C# では、プログラムで使用されるドライバーは、元のメッセージ駆動型ではなくイベント駆動型です。.net フレームワークによって提供されるイベントはすでに非常に豊富ですが、以前のシステムで定義されたリッチ メッセージは、これは便利な実装方法を提供するため、C# でメッセージを使用するとプログラミング効率が大幅に向上する場合があります。 1 メッセージを定義する

C# では、

const int WM_Lbutton = 0x201; のように、メッセージを Windows システムのオリジナルの 16 進数として定義する必要があります

public const int USER = 0x0400 // Windowsシステムで定義されたユーザーメッセージです

2 メッセージ送信


メッセージ送信はWindowsが提供するAPI関数SendMessageによって実装されており、そのプロトタイプは


 [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
    );

として定義されています。 3 メッセージの受け入れ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。