c#中使用SendMessage的方法

  介绍

小编给大家分享一下c#中使用SendMessage的方法,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

1定义消息

在c#中消息需要定义成windows系统中的原始的16进制数字,比如

const int WM_Lbutton=0 x201;//定义了鼠标的左键点击消息

公共常量int用户=0 x0400//是windows系统定义的用户消息


2消息发送


消息发送是通过windows提供的API函数SendMessage来实现的它的原型定义为

[DllImport (“User32.dll"入口点=癝endMessage"))   私有静态extern int SendMessage (   int hWnd,//目标窗口的句柄   int味精,//消息   int按钮,//第一个消息参数   int lParam//第二个消息参数   );

3消息的接受

在c#中,任何一个窗口都有也消息的接收处理函数,就是defproc函数

你可以在表单中重载该函数来处理消息

覆盖空白DefWndProc (ref System.WinForms保护。消息)   {   开关(m.msg)   {   案例WM_Lbutton:///字符串与MFC中因为的字符串的格式函数的使用方法有所不同   字符串消息=string.Format(“收到消息!参数为:{0},{1},,m.wParam, m.lParam);   MessageBox.Show(消息);///显示一个消息框   打破;   默认值:   基地。DefWndProc (ref);///调用基类函数处理非自定义消息。   打破;   }   }

其实,c#中的事件也是通过封装系统消息来实现的,如果你在DefWndProc函数中不处理该

那么,他会交给系统来处理该消息,系统便会通过代理来实现鼠标单击的处理函数,因此你可以通过

defproc函数来拦截消息,比如你想拦截某个按钮的单击消息

4 C #中其他的消息处理方法

在c#中有的时候需要对控件的消息进行预处理,比如你用油水界面的spreedsheet控件来处理Excel文件,你不想让用户可以随便选中

数据进行编辑,你就可以屏蔽掉鼠标事件,这个时候就必须拦截系统预先定义好的事件(这在MFC中称为子类化),你可以通过c#提供的一个接口

IMessageFilter来实现消息的过滤

中公开课Form1: System.Windows.Forms.Form IMessageFilter   {   const int WM_MOUSEMOVE=0 x200型   公共bool PreFilterMessage (ref消息)   {键键码=(钥匙)(int) m。按钮,Keys.KeyCode;   如果(m。味精==m.Msg==WM_MOUSEMOVE)//| | m。味精==WM_LBUTTONDOWN   {//MessageBox.Show(“忽略逃避…“);   返回true;   }   返回错误;   }   }

看完了这篇文章,相信你对c#中使用SendMessage的方法有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

c#中使用SendMessage的方法