C#的消息处理方法

  1. C# 中如何定义和接收消息? 
  2.    在C#中目前我还没有找到发送消息的类成员函数,所以只能采用通过调用WIN 32 API 的 SendMessage() 函数
  3. 实现。由于 SendMessage的参数中需要得到窗体的句柄(handler) ,所以又要调用另一个API FindWindow(), 两者
  4. 配合使用,达到在不同窗体之间的消息发送和接收功能。 
  5.    
  6.    另外一个要点是,需要通过重写(Override) 窗体的 DefWndProc() 过程来接收自定义的消息。DefWndProc 的
  7. 重写: 
  8.    
  9.    protected override void DefWndProc(ref System.Windows.Forms.Message m) 
  10.    { 
  11.    switch(m.Msg) 
  12.    { 
  13.    case ...: 
  14.    break
  15.    default
  16.    base.DefWndProc(ref m); 
  17.    break
  18.    } 
  19.    } 
  20.    
  21.    
  22. 下面是我的C#实践例程。 
  23. ------------------------------------ 
  24. ///file name: Note.cs 
  25. /// 
  26. public class Note 
  27.    //声明 API 函数 
  28.    
  29.    [DllImport("User32.dll",EntryPoint="SendMessage")] 
  30.    private static extern int SendMessage( 
  31.    int hWnd, // handle to destination window 
  32.    int Msg, // message 
  33.    int wParam, // first message parameter 
  34.    int lParam // second message parameter 
  35.    ); 
  36.    [DllImport("User32.dll",EntryPoint="FindWindow")] 
  37.    private static extern int FindWindow(string lpClassName,string 
  38. lpWindowName); 
  39.    //定义消息常数 
  40.    public const int USER = 0x500; 
  41.    public const int TEST = USER + 1; 
  42.    
  43.    
  44.    //向窗体发送消息的函数 
  45.    
  46.    private void SendMsgToMainForm(int MSG) 
  47.    { 
  48.    int WINDOW_HANDLER = FindWindow(null,@"Note Pad"); 
  49.    if(WINDOW_HANDLER == 0) 
  50.    { 
  51.    throw new Exception("Could not find Main window!"); 
  52.    } 
  53.    SendMessage(WINDOW_HANDLER,MSG,100,200); 
  54.    } 
  55.    
  56.    
  57. /// File name : Form1.cs 
  58. /// 接收消息的窗体 
  59. /// 
  60.    
  61. public class Form1 : System.Windows.Forms.Form 
  62.    public Form1() 
  63.    { 
  64.    // 
  65.    // Required for Windows Form Designer support 
  66.    // 
  67.    InitializeComponent(); 
  68.    // 
  69.    // TODO: Add any constructor code after InitializeComponent call 
  70.    // 
  71.    } 
  72.    /// 重写窗体的消息处理函数 
  73.    protected override void DefWndProc(ref System.Windows.Forms.Message m) 
  74.    { 
  75.    switch(m.Msg) 
  76.    { 
  77.    //接收自定义消息 USER,并显示其参数 
  78.    case Note.USER: 
  79.    string message = string.Format ("Received message! 
  80. parameters are :{0},{1}",m.WParam ,m.LParam); 
  81.    MessageBox.Show (message); 
  82.    break
  83.    default
  84.    base.DefWndProc(ref m); 
  85.    break
  86.    } 
  87.    //Console.WriteLine(m.LParam); 
  88.    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值