C#如何:使用 MessageWindow 類來響應Windows的訊息

來源:互聯網
上載者:User

.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);
  }
 }
}

 編譯代碼

此樣本需要引用下面的命名空間:

  • System

  • System.Windows.Forms

  • Microsoft.WindowsCE.Forms

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.