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. ///////////////////////////////////////// 
  25. ///file name: Note.cs 
  26. /// 
  27. public class Note 
  28.    //声明 API 函数 
  29.    
  30.    [DllImport("User32.dll",EntryPoint="SendMessage")] 
  31.    private static extern int SendMessage( 
  32.    int hWnd, // handle to destination window 
  33.    int Msg, // message 
  34.    int wParam, // first message parameter 
  35.    int lParam // second message parameter 
  36.    ); 
  37.    [DllImport("User32.dll",EntryPoint="FindWindow")] 
  38.    private static extern int FindWindow(string lpClassName,string 
  39. lpWindowName); 
  40.    //定义消息常数 
  41.    public const int USER = 0x500; 
  42.    public const int TEST = USER + 1; 
  43.    
  44.    
  45.    //向窗体发送消息的函数 
  46.    
  47.    private void SendMsgToMainForm(int MSG) 
  48.    { 
  49.    int WINDOW_HANDLER = FindWindow(null,@"Note Pad"); 
  50.    if(WINDOW_HANDLER == 0) 
  51.    { 
  52.    throw new Exception("Could not find Main window!"); 
  53.    } 
  54.    SendMessage(WINDOW_HANDLER,MSG,100,200); 
  55.    } 
  56.    
  57.    
  58. ///////////////////////////////////////// 
  59. /// File name : Form1.cs 
  60. /// 接收消息的窗体 
  61. /// 
  62.    
  63. public class Form1 : System.Windows.Forms.Form 
  64.    public Form1() 
  65.    { 
  66.    // 
  67.    // Required for Windows Form Designer support 
  68.    // 
  69.    InitializeComponent(); 
  70.    // 
  71.    // TODO: Add any constructor code after InitializeComponent call 
  72.    // 
  73.    } 
  74.    /// 重写窗体的消息处理函数 
  75.    protected override void DefWndProc(ref System.Windows.Forms.Message m) 
  76.    { 
  77.    switch(m.Msg) 
  78.    { 
  79.    //接收自定义消息 USER,并显示其参数 
  80.    case Note.USER: 
  81.    string message = string.Format ("Received message! 
  82. parameters are :{0},{1}",m.WParam ,m.LParam); 
  83.    MessageBox.Show (message); 
  84.    break
  85.    default
  86.    base.DefWndProc(ref m); 
  87.    break
  88.    } 
  89.    //Console.WriteLine(m.LParam); 
  90.    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值