在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时候还是大大提高编程的效率的。 1 定义消息 在c#中消息需要定义成windows系统中的原始的16进制数字,比如 const int WM_Lbutton = 0x201; //定义了鼠标的左键点击消息 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函数 你可以在form中重载该函数来处理消息 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的spreedsheet控件来处理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#中使用SendMessage2
时间: 2024-10-06 11:18:31
C#中使用SendMessage2的相关文章
电脑中通过修改注册表解决网页无法添加到收藏夹的方法
电脑中通过修改注册表解决网页无法添加到收藏夹的方法.最近有不少用户反映在电脑中出现了无法添加网页到收藏夹的问题,尝试了各种方法都无法解决这个问题.对此,在接下来的内容中,小编为大家提供了一种通过修改注册表解决网页无法添加到收藏夹的方法,大家可以参考一下. 1.按Win+R打开运行,输入regedit并按回车键; 2.在注册表编辑器依次展开HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserShell
IE8中显示“收藏夹栏”为灰色无法点击开启
浏览器的收藏夹是我们平时用到的最多功能之一,为了更方便的打开收藏夹中的网页,在IE8浏览器下,我们可以在工具栏的空白处单击右键,然后选择"收藏夹栏"即可在工具栏上显示收藏网页.但是在IE8中可能会遇到"收藏夹栏"无法点击勾选的情况,故障如下: 解决方案: 若此问题出现在Win7系统中可通过修改组策略来解决问题. 提示:更改注册表设置有一定危险,可能会造成系统瘫痪,建议在进行操作之前,先对注册表进行备份 按下 Windows + R 键打开"运行&quo
固定表头-在ASP.NET页面中,固定DATAGRID表头出现的问题
问题描述 在ASP.NET页面中,固定DATAGRID表头出现的问题 使用DIV标签加js纯页面固定表头,实际上就是将表头获取出来填充到一个DIV中,问题就是如何将表头和表中的内容对齐,特别是在表中数据动态改变列宽不固定的时候
html-c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示?
问题描述 c# 提取微信文章中的图片是WEBP格式,如何转成JPG格式以便能够正常显示? 根据微信文章地址,提取到了微信文章的HTML源文件,但图片是WEBP格式,并防盗链. 请问,如何通过C#方法,把WEBP转成JPG格式用于保存在本地以便可以正常浏览? 提取到的微信图片的地址如下: http://mmbiz.qpic.cn/mmbiz/Ek7ZheM28KXya0WfIFv58aNZEBb3YSWX9iaMJHLhuz7o5xNia68MItJfDya947ibSX1HVNpy9V3iaJr
在jsp中怎么给文字加背景图片啊
问题描述 在jsp中怎么给文字加背景图片啊 动态生成的菜单 代码如下 function startParentNode(text){ //alert(text); if(""站址管理"" == text){ document.write('<table border=""0"" cellpadding=""1"" cellspacing=""0"&qu
Spring.Net在Mvc4.0中应用的说明
案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll 2.修改Global文件 (SpringMvcApplication) 3.控制器添加属性 4.WebConfig配置 <!--必须紧跟着configuration之后--> <configSections> <sectionGroup name="spring
div布局-请问怎么让div中的div在垂直方向上居中呢?
问题描述 请问怎么让div中的div在垂直方向上居中呢? 比如:下面这段代码,如何让里面的div在垂直方向上面居中呢(不好意思,实在是没有悬赏币了) .out{ width:500px; height:500px; background:blue;}.inn{ width:200px; height:200px; background:red;} 解决方案 你的inn怎么比out还大..搞反了吧..通过margin来定位.absolute定位最好,不需要考虑父容器,只需要依据自身的宽和高度来调整
MathType在Word中无法打开怎么办
解决办法如下: 1.桌面右键选择"分辨率". 桌面右键中选择"屏幕分辨率" 2.把显示器显示设置从"扩展显示",改为只通过"显示器1"或者"显示器2"来显示,显示器1或2为你自己实际应用的显示器. 显示器显示设置从"扩展显示",改为只通过"显示器1"或者"显示器2"来显示 问题的原因在于,扩展时系统把部分应用程序显示到另一个不存在的"
MathType工具栏中怎么添加符号
MathType工具栏中怎么添加符号 1.打开MathType公式编辑器,进入到编辑界面.打开方式随意,按照自己的使用习惯就可以. 打开软件进入编辑状态 2.利用MathType公式编辑器编辑出自己所需要的符号,比如这里是欧米茄符号.编辑方法按照自己的使用习惯或者是利用常规的编辑符号的方法进行编辑. 在MathType中编辑出所需要的符号 3.点击MathType工具栏中的标签栏,看你想要把符号放在哪一类的标签下就点击哪一个标签.比如这里放到代数标签栏中. 点击选择MathType标签栏 4