次の方法で共有


Message 構造体

Windows メッセージを実装します。

この型のすべてのメンバの一覧については、Message メンバ を参照してください。

System.Object
   System.ValueType
      System.Windows.Forms.Message

Public Structure Message
[C#]
public struct Message
[C++]
public __value struct Message

[JScript] JScript では、.NET Framework の構造体を利用することができます。ただし、独自に定義することはできません。

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

Message 構造体は、Windows が送信するメッセージをラップします。この構造体を使用して、メッセージをラップし、ディスパッチされるウィンドウ プロシージャにそのメッセージを割り当てることができます。この構造体を使用すると、システムからアプリケーションやコントロールに送られるメッセージに関する情報を取得することもできます。

Message 構造体は直接は作成できません。 Message 構造体を作成するには、 Create メソッドを使用します。より効率的に Message 構造体を作成するために、 Message 構造体は、可能な場合は、新しい Message 構造体をインスタンス化する代わりに既存の構造体のプールを使用します。ただし、プール内に使用できる Message 構造体がない場合は、新しい構造体がインスタンス化されます。

使用例

[Visual Basic, C#, C++] WndProc メソッドをオーバーライドして、 Message 構造体で示されるオペレーティング システム メッセージを処理する方法を次の例に示します。この例の場合、WM_ACTIVEAPP オペレーティング システム メッセージは、別のアプリケーションがどのタイミングでアクティブになったかを判定するために処理されます。使用できる Message.MsgMessage.LParam 、および Message.WParam の値については、MSDN ライブラリから入手できるプラットフォーム SDK のリファレンスを参照してください。実際の定数値は、プラットフォーム SDK (コア SDK セクション) のダウンロードに含まれている windows.h ヘッダー ファイルの中に見つけることができます。これは MSDN からも入手できます。

 
Imports System
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 'Main

        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

[C#] 
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);
            }
        }

    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]
        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);
        }
    }
}

[C++] 

using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;

namespace csTempWindowsApplication1 {
public __gc class Form1 : public System::Windows::Forms::Form {

private:
    // Constant value was found in the S"windows.h" header file.
    const static Int32  WM_ACTIVATEAPP = 0x001C;

    Boolean appActive;

public:
    Form1() {
        appActive = true;
        this->Size = System::Drawing::Size(300, 300);
        this->Text = S"Form1";
        this->Font = new System::Drawing::Font(S"Microsoft Sans Serif",
            18.0F, System::Drawing::FontStyle::Bold,
            System::Drawing::GraphicsUnit::Point, ((System::Byte)(0)));
    }

protected:
    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(S"Application is active",
                this->Font, SystemBrushes::ActiveCaptionText, 20, 20);
        } else {
            e->Graphics->FillRectangle(SystemBrushes::InactiveCaption,
                20, 20, 260, 50);
            e->Graphics->DrawString(S"Application is Inactive",
                this->Font, SystemBrushes::ActiveCaptionText, 20, 20);
        }
    }

    [System::Security::Permissions::PermissionSet(System::Security::Permissions::SecurityAction::Demand, Name="FullTrust")]
    void WndProc(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;
        }
        Form::WndProc(m);
    }
};
}

[STAThread]
int main() {
    Application::Run(new csTempWindowsApplication1::Form1());
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Windows.Forms

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: System.Windows.Forms (System.Windows.Forms.dll 内)

参照

Message メンバ | System.Windows.Forms 名前空間