.NET Compact Framework 提供 MessageWindow 和 Message 類以產生和接收基於 Windows 的訊息。MessageWindow 類使用機器碼以及表單的控制代碼建立一個視窗,並執行所需的平台叫用來調用本機 Windows 函數。MessageWindow 類僅在 .NET Compact Framework 中提供。
請使用訊息視窗的視窗控制代碼 Hwnd 向訊息視窗發送 Windows 訊息。您可以使用Managed 程式碼中的 Create 或使用應用程式中的本機控制項產生訊息。您只能接收您產生的訊息。不能使用 MessageWindow 監視作業系統訊息。
當訊息視窗檢測到特定訊息時,它將使用 WndProc 方法通知表單,這樣您就能提供代碼來響應基於 Windows 的訊息。
此樣本示範 MessageWindow 的功能,但是沒有使用本機組件進行示範。當滑鼠指標處於自訂控制項或 Panel 控制項中的 Rectangle 內時,它向一個表單發送包含當前指標的 x 和 y 座標的 Windows 訊息。自訂控制項在體上顯示為一個框。這兩個控制項都使用 OnMouseMove 方法發送訊息。這些訊息包含 x 座標和 y 座標。該表單通過更新標籤(使用當前 x 座標和 y 座標)和發送訊息的控制項來響應使用者定義的 WM_BOXUPDATE 和 WM_PNLUPDATE 訊息。
當滑鼠位於框和面板之外時,表單的 OnMouseMove 方法在表單的上下文中使用 x 座標和 y 座標來更新標籤。
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);
}
}
}
編譯代碼
此樣本需要引用下面的命名空間: