NativeWindow.CreateHandle(CreateParams) メソッド

定義

作成パラメーターを指定してウィンドウとそのハンドルを作成します。

public:
 virtual void CreateHandle(System::Windows::Forms::CreateParams ^ cp);
public virtual void CreateHandle (System.Windows.Forms.CreateParams cp);
abstract member CreateHandle : System.Windows.Forms.CreateParams -> unit
override this.CreateHandle : System.Windows.Forms.CreateParams -> unit
Public Overridable Sub CreateHandle (cp As CreateParams)

パラメーター

cp
CreateParams

ウィンドウの作成パラメーターを指定する CreateParams

例外

ネイティブ ウィンドウを作成しようとしたときに、オペレーティング システムでリソース不足が発生しました。

ネイティブ Windows API で指定されたウィンドウを作成できませんでした。

現在のネイティブ ウィンドウのハンドルが既に割り当てられています。つまり、Handle プロパティが Zero ではありません。

次のコード例では、特定のオペレーティング システム ウィンドウ クラス名を持つウィンドウを作成する方法を示します。 この例では、これを実現するために を NativeWindow 継承するクラスを作成します。

クラスはMyNativeWindow、 を に設定して新しいウィンドウをClassNameBUTTON作成します。 これにより、Win32 ボタン ウィンドウが作成されます。 ボタンの場所とサイズを設定し、追加のウィンドウ スタイルを指定します。 クラスは、 メソッドを使用し、 メソッドを CreateHandle オーバーライド WndProc して受信したウィンドウ メッセージをインターセプトする方法を示します。 この例では、WM_ACTIVATEAPP メッセージを検索しますが、実際のプログラムでは、作成された型に固有のウィンドウ メッセージに置き換えることができます。

注意

一部のコントロールの種類では、ウィンドウの代わりにウィンドウの親にウィンドウ メッセージが送信されます。 詳細については、Windows プラットフォーム SDKを参照してください。

// MyNativeWindow class to create a window given a class name.
ref class MyNativeWindow: public NativeWindow
{
private:

   // Constant values were found in the S"windows.h" header file.
   literal int WS_CHILD = 0x40000000,WS_VISIBLE = 0x10000000,WM_ACTIVATEAPP = 0x001C;
   int windowHandle;

public:
   MyNativeWindow( Form^ parent )
   {
      CreateParams^ cp = gcnew CreateParams;

      // Fill in the CreateParams details.
      cp->Caption = "Click here";
      cp->ClassName = "Button";

      // Set the position on the form
      cp->X = 100;
      cp->Y = 100;
      cp->Height = 100;
      cp->Width = 100;

      // Specify the form as the parent.
      cp->Parent = parent->Handle;

      // Create as a child of the specified parent
      cp->Style = WS_CHILD | WS_VISIBLE;

      // Create the actual window
      this->CreateHandle( cp );
   }

protected:

   // Listen to when the handle changes to keep the variable in sync

   virtual void OnHandleChange() override
   {
      windowHandle = (int)this->Handle;
   }

   virtual void WndProc( Message % m ) override
   {
      // Listen for messages that are sent to the button window. Some messages are sent
      // to the parent window instead of the button's window.
      switch ( m.Msg )
      {
         case WM_ACTIVATEAPP:
            
            // Do something here in response to messages
            break;
      }
      NativeWindow::WndProc( m );
   }
};
// MyNativeWindow class to create a window given a class name.
internal class MyNativeWindow : NativeWindow
{

    // Constant values were found in the "windows.h" header file.
    private const int WS_CHILD = 0x40000000,
                      WS_VISIBLE = 0x10000000,
                      WM_ACTIVATEAPP = 0x001C;

    private int windowHandle;

    public MyNativeWindow(Form parent)
    {

        CreateParams cp = new CreateParams();

        // Fill in the CreateParams details.
        cp.Caption = "Click here";
        cp.ClassName = "Button";

        // Set the position on the form
        cp.X = 100;
        cp.Y = 100;
        cp.Height = 100;
        cp.Width = 100;

        // Specify the form as the parent.
        cp.Parent = parent.Handle;

        // Create as a child of the specified parent
        cp.Style = WS_CHILD | WS_VISIBLE;

        // Create the actual window
        this.CreateHandle(cp);
    }

    // Listen to when the handle changes to keep the variable in sync
    protected override void OnHandleChange()
    {
        windowHandle = (int)this.Handle;
    }

    protected override void WndProc(ref Message m)
    {
        // Listen for messages that are sent to the button window. Some messages are sent
        // to the parent window instead of the button's window.

        switch (m.Msg)
        {
            case WM_ACTIVATEAPP:
                // Do something here in response to messages
                break;
        }
        base.WndProc(ref m);
    }
}
' MyNativeWindow class to create a window given a class name.
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Friend Class MyNativeWindow
    Inherits NativeWindow

    ' Constant values were found in the "windows.h" header file.
    Private Const WS_CHILD As Integer = &H40000000, _
                  WS_VISIBLE As Integer = &H10000000, _
                  WM_ACTIVATEAPP As Integer = &H1C

    Private windowHandle As Integer

    Public Sub New(ByVal parent As Form)

        Dim cp As CreateParams = New CreateParams()

        ' Fill in the CreateParams details.
        cp.Caption = "Click here"
        cp.ClassName = "Button"

        ' Set the position on the form
        cp.X = 100
        cp.Y = 100
        cp.Height = 100
        cp.Width = 100

        ' Specify the form as the parent.
        cp.Parent = parent.Handle

        ' Create as a child of the specified parent
        cp.Style = WS_CHILD Or WS_VISIBLE

        ' Create the actual window
        Me.CreateHandle(cp)
    End Sub

    ' Listen to when the handle changes to keep the variable in sync
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Sub OnHandleChange()
        windowHandle = Me.Handle.ToInt32()
    End Sub

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
        Protected Overrides Sub WndProc(ByRef m As Message)
        ' Listen for messages that are sent to the button window. Some messages are sent
        ' to the parent window instead of the button's window.

        Select Case (m.Msg)
            Case WM_ACTIVATEAPP
                ' Do something here in response to messages
        End Select

        MyBase.WndProc(m)
    End Sub

End Class

注釈

パラメーターは cp 、ウィンドウとそのハンドルを作成するためにネイティブ Win32 CreateWindowEx メソッドに渡される値を指定します。

フィールドが ClassName でない null場合、新しく作成されたウィンドウ ハンドルは、指定したクラスから継承されます。 たとえば、 が にBUTTON設定されている場合ClassName、新しく作成されたウィンドウは Win32 BUTTON ウィンドウ クラスに基づいています。 オブジェクトの ClassName プロパティはParamnull または 構造体として宣言されたクラスのインスタンスを参照する必要があります。

このコードは、クラスの概要に NativeWindow 示されている例からの抜粋です。 簡潔にするために一部のコードは表示されません。 コードの一覧全体については、 を参照してください NativeWindow

注意

指定されたクラス名は、オペレーティング システムに登録されます。

適用対象

こちらもご覧ください