>  기사  >  백엔드 개발  >  C#에서 SendMessage를 사용하는 방법은 무엇입니까?

C#에서 SendMessage를 사용하는 방법은 무엇입니까?

零下一度
零下一度원래의
2017-07-03 17:01:062861검색

C#에서 프로그램에 사용되는 드라이버는 원래 메시지 중심이 아닌 이벤트 중심입니다. .net 프레임워크에서 제공하는 이벤트는 이미 매우 풍부하지만 이전 시스템에서 정의된 풍부한 메시지는 프로그래밍을 제공합니다. 이는 편리한 구현 방법을 제공하므로 C#에서 메시지를 사용하면 프로그래밍 효율성이 크게 향상되는 경우가 있습니다.

 1 메시지 정의

C#에서는 메시지를 Windows 시스템의 원래 16진수로 정의해야 합니다. 예:

const int WM_Lbutton = 0x201; //마우스 왼쪽 클릭 메시지가 정의됩니다.

public const int USER = 0x0400 // 윈도우 시스템에서 정의한 사용자 메시지입니다


 2 메시지 전송


 메시지 전송은 윈도우에서 제공하는 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#에서는 때로는 메시지를 전처리해야 합니다. control, 예를 들어 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.