Gewusst wie: Verwenden der MessageWindow-Klasse
Aktualisiert: November 2007
.NET Compact Framework stellt die MessageWindow-Klasse und die Message-Klasse zum Generieren und Empfangen Windows-basierter Meldungen bereit. Die MessageWindow-Klasse erstellt in systemeigenem Code ein Fenster mit einem Handle für das Formular und führt die erforderlichen Plattformaufrufe systemeigener Windows-Funktionen aus. Die MessageWindow-Klasse ist nur in .NET Compact Framework verfügbar.
Verwenden Sie das Fensterhandle Hwnd zum Meldungsfenster, um Windows-Meldungen an das Meldungsfenster zu senden. Zum Generieren von Meldungen können Sie Create in verwaltetem Code oder ein systemeigenes Steuerelement in der Anwendung verwenden. Sie können nur die Meldungen empfangen, die Sie generieren. MessageWindow kann nicht zur Überwachung von Betriebssystemmeldungen verwendet werden.
Beim Erkennen bestimmter Meldungen benachrichtigt das Meldungsfenster mithilfe der WndProc-Methode ein Formular, sodass Sie Code zum Reagieren auf eine Windows-basierte Meldung bereitstellen können.
Hinweis: |
---|
Beachten Sie, dass .NET Compact Framework als Alternative zu MessageWindow die Möglichkeit bietet, Delegaten als Funktionszeiger zu marshallen und verwaltete Funktionen direkt aus systemeigenem Code aufzurufen. Weitere Informationen finden Sie unter Interoperabilität in .NET Compact Framework. |
Beispiel
In diesem Beispiel wird die Funktionalität von einem MessageWindow veranschaulicht, jedoch ohne systemeigene Komponente. Der Beispielcode sendet Windows-Meldungen mit den aktuellen x- und y-Koordinaten des Zeigers an ein Formular, wenn sich der Mauszeiger innerhalb von Rectangle in einem benutzerdefinierten Steuerelement oder in einem Panel-Steuerelement befindet. Das benutzerdefinierte Steuerelement wird im Formular als Feld dargestellt. Beide Steuerelemente verwenden die OnMouseMove-Methode zum Senden von Meldungen. Diese Meldungen enthalten die x- und die y-Koordinate. Das Formular reagiert auf benutzerdefinierte WM_BOXUPDATE-Meldungen und WM_PNLUPDATE-Meldungen, indem eine Bezeichnung mit den aktuellen x- und y-Koordinaten und dem Steuerelement, das die Meldung gesendet hat, aktualisiert wird.
Wenn sich der Mauszeiger außerhalb des Felds und des Fensters befindet, aktualisiert die OnMouseMove-Methode des Formulars die Bezeichnung mit den x- und y-Koordinaten im Kontext des Formulars.
Imports System
Imports System.Windows.Forms
Imports Microsoft.WindowsCE.Forms
Public Class MessageWindowForm
Inherits System.Windows.Forms.Form
Private mainMenu1 As System.Windows.Forms.MainMenu
' Create an instance of MsgWindow, a derived MessageWindow class.
Private MsgWin As MsgWindow
Public Sub New()
InitializeComponent()
' Create the message window using this form for its constructor.
Me.MsgWin = New MsgWindow(Me)
End Sub
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
#Region "Windows Form Designer generated code"
Private Sub InitializeComponent()
Me.mainMenu1 = New System.Windows.Forms.MainMenu
'
' MessageWindowForm
'
Me.Menu = Me.mainMenu1
Me.Text = "Message Window Test"
End Sub
#End Region
Shared Sub Main()
Application.Run(New MessageWindowForm)
End Sub
' Process taps to generate messages
' with the WParam and LParam parameters
' using the X and Y mouse coordinates.
Protected Overrides Sub OnMouseMove(ByVal e As MouseEventArgs)
Dim msg As Microsoft.WindowsCE.Forms.Message = _
Microsoft.WindowsCE.Forms.Message.Create(MsgWin.Hwnd, _
MsgWindow.WM_CUSTOMMSG, New IntPtr(e.X), New IntPtr(e.Y))
MessageWindow.SendMessage(msg)
MyBase.OnMouseMove(e)
End Sub
' This callback method responds to the Windows-based message.
Public Sub RespondToMessage(ByVal x As Integer, ByVal y As Integer)
Me.Text = "X = " + x.ToString() + ", Y= " + y.ToString()
End Sub
End Class
' Derive MessageWindow to respond to
' Windows messages and to notify the
' form when they are received.
Public Class MsgWindow
Inherits MessageWindow
' Assign integers to messages.
' Note that custom Window messages start at WM_USER = 0x400.
Public Const WM_CUSTOMMSG As Integer = &H400
' Create an instance of the form.
Private msgform As MessageWindowForm
' Save a reference to the form so it can
' be notified when messages are received.
Public Sub New(ByVal msgform As MessageWindowForm)
Me.msgform = msgform
End Sub
' Override the default WndProc behavior to examine messages.
Protected Overrides Sub WndProc(ByRef msg As Microsoft.WindowsCE.Forms.Message)
Select Case 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
Me.msgform.RespondToMessage(Fix(msg.WParam.ToInt32), Fix(msg.LParam.ToInt32))
End Select
' Call the base class WndProc method
' to process any messages not handled.
MyBase.WndProc(msg)
End Sub
End Class
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);
}
}
}
Kompilieren des Codes
Für dieses Beispiel sind Verweise auf die folgenden Namespaces erforderlich: