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 중국어 웹사이트의 기타 관련 기사를 참조하세요!