中国最专业的商业控件服务网

慧都控件网

电话:400-700-1020(免费)或023-66090381

C#中消息的工作流程详解

作者:不详 出处:网络转载  2010/3/4 15:48:45 阅读 0 次

  C#中消息的工作流程:

  甘特图Xgantt(全球首款甘特图32年历史)   Visual WebGui (完美的用户界面解决方案)
  Stimulsoft Reports.Net (报表生成控件)   DXperience Uni Premium 白金版(慧都独家)

  C#中的消息被Application类从应用程序消息队列中取出,然后分发到消息对应的窗体,窗体对象的第一个响应函数是对象中的protected override void WndProc(ref System.Windows.Forms.Message e)方法。

  它再根据消息的类型调用默认的消息响应函数(如OnMouseDown),默认的响应函数然后根据对象的事件字段(如this.MouseDown )中的函数指针列表,调用用户所加入的响应函数(如Form1_MouseDown1和Form1_MouseDown2),而且调用顺序和用户添加顺序一致。

  根据这个流程,我做了个模仿程序,有不足的地方还请大家提供更完善的补充。


  using System;
  //创建一个委托,返回类型void,两个参数
  public delegate void KeyDownEventHandler(object sender, KeyEventArgs e);
  //数据参数类
  class KeyEventArgs : EventArgs
  {
  private char keyChar;
  public KeyEventArgs(char keyChar)
  : base()
  {
  this.keyChar = keyChar;
  }
  public char KeyChar
  {
  get { return keyChar; }
  }
  }
  //模仿Application类
  class M_Application
  {
  public static void Run(M_Form form)
  {
  bool finished = false;
  do
  {
  Console.WriteLine("Input a char");
  string response = Console.ReadLine();
  char responseChar = (response == "") ? ' ' : char.ToUpper(response[0]);
  switch (responseChar)
  {
  case 'X':
  finished = true;
  break;
  default:
  //得到按键信息的参数
  KeyEventArgs keyEventArgs = new KeyEventArgs(responseChar);
  //向窗体发送一个消息
  form.WndProc(keyEventArgs);
  break;
  }
  } while (!finished);
  }
  }
  //模仿窗体类
  class M_Form
  {
  //定义事件
  public event KeyDownEventHandler KeyDown;
  public M_Form()
  {
  this.KeyDown += new KeyDownEventHandler(this.M_Form_KeyDown);
  }
  //事件处理函数
  private void M_Form_KeyDown(object sender, KeyEventArgs e)
  {
  Console.WriteLine("Capture key:{0}", e.KeyChar);
  }
  //窗体处理函数
  public void WndProc(KeyEventArgs e)
  {
  KeyDown(this, e);
  }
  }
  //主程序运行
  class MainEntryPoint
  {
  static void Main()
  {
  M_Application.Run(new M_Form());
  }
  }

慧都年终促销第2季

新闻搜索

Dxperience白金版满足你全面需求