Message 结构
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
实现 Windows 消息。
public value class Messagepublic value class Message : IEquatable<System::Windows::Forms::Message>public struct Messagepublic struct Message : IEquatable<System.Windows.Forms.Message>type Message = structPublic Structure MessagePublic Structure Message
Implements IEquatable(Of Message)- 继承
- 实现
示例
下面的代码示例演示如何重写 WndProc 方法来处理 中 Message标识的操作系统消息。 在此示例中处理WM_ACTIVATEAPP操作系统消息,以了解另一个应用程序何时变为活动状态。 有关可用 Message.Msg、 Message.LParam和 Message.WParam 值的信息,请参阅 MSG 结构 文档。 有关实际常量值的信息,请参阅 消息常量。
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Security::Permissions;
namespace csTempWindowsApplication1
{
   public ref class Form1: public System::Windows::Forms::Form
   {
   private:
      // Constant value was found in the "windows.h" header file.
      static const Int32 WM_ACTIVATEAPP = 0x001C;
      Boolean appActive;
   public:
      Form1()
      {
         appActive = true;
         this->Size = System::Drawing::Size( 300, 300 );
         this->Text = "Form1";
         this->Font = gcnew System::Drawing::Font( "Microsoft Sans Serif",18.0F,System::Drawing::FontStyle::Bold,System::Drawing::GraphicsUnit::Point,((System::Byte)(0)) );
      }
   protected:
      virtual void OnPaint( PaintEventArgs^ e ) override
      {
         
         // Paint a string in different styles depending on whether the
         // application is active.
         if ( appActive )
         {
            e->Graphics->FillRectangle( SystemBrushes::ActiveCaption, 20, 20, 260, 50 );
            e->Graphics->DrawString( "Application is active", this->Font, SystemBrushes::ActiveCaptionText, 20, 20 );
         }
         else
         {
            e->Graphics->FillRectangle( SystemBrushes::InactiveCaption, 20, 20, 260, 50 );
            e->Graphics->DrawString( "Application is Inactive", this->Font, SystemBrushes::ActiveCaptionText, 20, 20 );
         }
      }
      [SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)]
      virtual void WndProc( Message% m ) override
      {
         
         // Listen for operating system messages.
         switch ( m.Msg )
         {
            case WM_ACTIVATEAPP:
               
               // The WParam value identifies what is occurring.
               appActive = (int)m.WParam != 0;
               
               // Invalidate to get new text painted.
               this->Invalidate();
               break;
         }
         Form::WndProc( m );
      }
   };
}
[STAThread]
int main()
{
   Application::Run( gcnew csTempWindowsApplication1::Form1 );
}
using System;
using System.Drawing;
using System.Windows.Forms;
namespace csTempWindowsApplication1
{
    public class Form1 : System.Windows.Forms.Form
    {
        // Constant value was found in the "windows.h" header file.
        private const int WM_ACTIVATEAPP = 0x001C;
        private bool appActive = true;
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }
        
        public Form1()
        {
            this.Size = new System.Drawing.Size(300,300);
            this.Text = "Form1";
            this.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
        }
        protected override void OnPaint(PaintEventArgs e) 
        {
            // Paint a string in different styles depending on whether the
            // application is active.
            if (appActive) 
            {
                e.Graphics.FillRectangle(SystemBrushes.ActiveCaption,20,20,260,50);
                e.Graphics.DrawString("Application is active", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
            }
            else 
            {
                e.Graphics.FillRectangle(SystemBrushes.InactiveCaption,20,20,260,50);
                e.Graphics.DrawString("Application is Inactive", this.Font, SystemBrushes.ActiveCaptionText, 20,20);
            }
        }
        protected override void WndProc(ref Message m) 
        {
            // Listen for operating system messages.
            switch (m.Msg)
            {
                // The WM_ACTIVATEAPP message occurs when the application
                // becomes the active application or becomes inactive.
                case WM_ACTIVATEAPP:
                    // The WParam value identifies what is occurring.
                    appActive = (((int)m.WParam != 0));
                    // Invalidate to get new text painted.
                    this.Invalidate();
                    break;                
            }
            base.WndProc(ref m);
        }
    }
}
Imports System.Drawing
Imports System.Windows.Forms
Namespace csTempWindowsApplication1
    Public Class Form1
        Inherits System.Windows.Forms.Form
        ' Constant value was found in the "windows.h" header file.
        Private Const WM_ACTIVATEAPP As Integer = &H1C
        Private appActive As Boolean = True
        <STAThread()> _
        Shared Sub Main()
            Application.Run(New Form1())
        End Sub
        Public Sub New()
            MyBase.New()
            Me.Size = New System.Drawing.Size(300, 300)
            Me.Text = "Form1"
            Me.Font = New System.Drawing.Font("Microsoft Sans Serif", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
            ' Paint a string in different styles depending on whether the
            ' application is active.
            If (appActive) Then
                e.Graphics.FillRectangle(SystemBrushes.ActiveCaption, 20, 20, 260, 50)
                e.Graphics.DrawString("Application is active", Me.Font, SystemBrushes.ActiveCaptionText, 20, 20)
            Else
                e.Graphics.FillRectangle(SystemBrushes.InactiveCaption, 20, 20, 260, 50)
                e.Graphics.DrawString("Application is Inactive", Me.Font, SystemBrushes.ActiveCaptionText, 20, 20)
            End If
        End Sub
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
        Protected Overrides Sub WndProc(ByRef m As Message)
            ' Listen for operating system messages
            Select Case (m.Msg)
                ' The WM_ACTIVATEAPP message occurs when the application
                ' becomes the active application or becomes inactive.
            Case WM_ACTIVATEAPP
                    ' The WParam value identifies what is occurring.
                    appActive = (m.WParam.ToInt32() <> 0)
                    ' Invalidate to get new text painted.
                    Me.Invalidate()
            End Select
            MyBase.WndProc(m)
        End Sub
    End Class
End Namespace
注解
结构 Message 包装 Windows 发送的消息。 可以使用此结构包装消息并将其分配给要调度的窗口过程。 还可以使用此结构获取有关系统发送到应用程序或控件的消息的信息。 有关 Windows 消息的详细信息,请参阅 消息和消息队列。
不能直接创建 Message 。 请改用 Create 方法。 为了提高效率, Message 尽可能使用其现有 Message池,而不是实例化新池。 但是,如果 Message 池中不可用,则会实例化一个新实例。
属性
| HWnd | 获取或设置消息的窗口句柄。 | 
| LParam | 指定消息的 LParam 字段。 | 
| Msg | 获取或设置消息的 ID 号。 | 
| Result | 指定为响应消息处理而向 Windows 返回的值。 | 
| WParam | 获取或设置消息的 WParam 字段。 | 
方法
| Create(IntPtr, Int32, IntPtr, IntPtr) | 创建一个新的 Message。 | 
| Equals(Message) | 指示当前对象是否等于同一类型的另一个对象。 | 
| Equals(Object) | 确定指定对象是否等于当前对象。 | 
| GetHashCode() | 返回此实例的哈希代码。 | 
| GetLParam(Type) | 获取 LParam 值,并将其转换为对象。 | 
| ToString() | 
运算符
| Equality(Message, Message) | 确定 Message 的两个实例是否相等。 | 
| Inequality(Message, Message) | 确定 Message 的两个实例是否不相等。 |