现在的位置: 首页 > 综合 > 正文

MessageWindow 类

2018年04月05日 ⁄ 综合 ⁄ 共 2507字 ⁄ 字号 评论关闭

下面的代码示例演示 MessageWindow。此示例让窗体将有关当前鼠标位置的 x-y 坐标的基于 Windows 的消息发送到消息窗口,消息窗口调用窗体上的回调方法在标题栏中显示相应的坐标。

窗体包含一个从 MessageWindow 派生的自定义类 MsgWindowMsgWindow 类检查重写的 WndProc 方法中的消息,查找带有 WM_CUSTOMMSG 标识符的消息。当 MsgWindow 类找到这些消息后,将调用窗体中定义的 RespondToMessage 回调方法。

窗体创建 MsgWindow 的一个新实例。MsgWindow 构造函数采用一个窗体作为参数,在此示例中将采用它所在的窗体作为参数。窗体在重写的 OnMouseMove 方法中生成基于 Windows 的消息。

当窗体运行时,若移动鼠标则会生成要发送到消息窗口中的消息。消息窗口的 WndProc 方法调用窗体上的回调方法来响应这些消息。

注意,必须在您的项目中添加对 Microsoft.WindowsCE.Forms 的引用。

 

using System;
using System.Windows.Forms;
using Microsoft.WindowsCE.Forms;

namespace MsgWindow
{
public class MessageWindowForm : System.Windows.Forms.Form
{
 private System.Windows.Forms.MainMenu mainMenu1;

 // Create an instance of MsgWindow, a derived MessageWindow class.
 MsgWindow MsgWin;

 public MessageWindowForm()
 {

  InitializeComponent();

  // Create the message window using this form for its constructor.
 this.MsgWin = new MsgWindow(this);

  }
  protected override void Dispose( bool disposing )
  {
   base.Dispose( disposing );
  }
  #region Windows Form Designer generated code
  private void InitializeComponent()
  {
   this.mainMenu1 = new System.Windows.Forms.MainMenu();
   this.Menu = this.mainMenu1;
   this.Text = "Message Window Test";

  }
  #endregion

  static void Main()
  {
   Application.Run(new MessageWindowForm());
  }

  // Process taps to generate messages
  // with the WParam and LParam parameters
  // using the X and Y mouse coordinates.
  protected override void OnMouseMove(MouseEventArgs e)
  {
   Message msg = Message.Create(MsgWin.Hwnd,
    MsgWindow.WM_CUSTOMMSG,
    (IntPtr)e.X,
    (IntPtr)e.Y);
   MessageWindow.SendMessage(ref msg);
   base.OnMouseMove(e);
  }

  // This callback method responds to the Windows-based message.
  public void RespondToMessage(int x, int y)
  {
   this.Text = "X = " + x.ToString() + ", Y= " + y.ToString();
  }
 }

 // Derive MessageWindow to respond to
 // Windows messages and to notify the
 // form when they are received.
 public class MsgWindow : MessageWindow
 {
  // Assign integers to messages.
  // Note that custom Window messages start at WM_USER = 0x400.
  public const int WM_CUSTOMMSG = 0x0400;

  // Create an instance of the form.
  private MessageWindowForm msgform;

  // Save a reference to the form so it can
  // be notified when messages are received.
  public MsgWindow(MessageWindowForm msgform)
  {
   this.msgform = msgform;
  }

  // Override the default WndProc behavior to examine messages.
  protected override void WndProc(ref Message msg)
  {
   switch(msg.Msg)
   {
    // If message is of interest, invoke the method on the form that
    // functions as a callback to perform actions in response to the message.
    case WM_CUSTOMMSG:
     this.msgform.RespondToMessage((int)msg.WParam, (int)msg.LParam);
     break;
   }
   // Call the base WndProc method
   // to process any messages not handled.
   base.WndProc(ref msg);
  }
 }
}

抱歉!评论已关闭.