永发信息网

c#怎么同mfc sendmessage通信

答案:1  悬赏:0  手机版
解决时间 2021-04-04 22:21
c#怎么同mfc sendmessage通信
最佳答案
在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; 
 }
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
dreamweaver cs6 破解版谁有发我?在线等!
化妆品怎样保存,未开封的护肤品夏天30多度需
好久又见 这四个字谁能给我解释一下,我想不
情寄沧澜,宿世羁连.是谁的诗
单选题以“梨花院落溶溶月”为上句,下面四个
我梦见大车压我没有压到吓醒了我男人十五四岁
对农业生产影响最显著的因素是A.地形B.气候C.
外地户口在上海读完初三是留在上海读职高还是
日照 哪里有卖嘉宝米粉的?
日本老龄化如何解决,日本人口老龄化什么时候
柴可夫斯基写的曲子有那些
OEM主板(Nvidia nForce 430(MCP61))在BIOS里
古人为什么把“月宫”又称为“广寒宫”
怎样不经意小幅度的撩男生,调戏他
网贷借到8600 利息2020 这属于非法么
推荐资讯
属猴男孩子2016年7月5日出生刘姓起什么名好
五年级上学期第一课“我的写作梦”仿写3小节
一首歌有一句:来不及说再见 是一首高中或者
有用云代练的嘛,帮我看看怎么回事
在单位被一个女孩羞辱
上古卷轴5七彩魔法mod怎么用
三星服务中心检测一下手机要钱吗?
到佛教寺院的殿堂拜佛,是按顺时针的顺序拜呢
67×0.21-0.62=7.2×0.1×28.5=18.1×(0.92+
南昌拜年习俗
花骨朵儿什么意思
红米手机内存怎么清理,怎么查看红米手机内存
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?