介绍
小编给大家分享一下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的方法有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!