NativeWindow.CreateHandle(CreateParams) Metod

Definition

Skapar ett fönster och dess handtag med de angivna skapandeparametrarna.

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)

Parametrar

cp
CreateParams

En CreateParams som anger skapandeparametrarna för det här fönstret.

Undantag

Operativsystemet fick slut på resurser när det interna fönstret skulle skapas.

Det interna Windows-API:et kunde inte skapa det angivna fönstret.

Referensen för det aktuella inbyggda fönstret har redan tilldelats. i förklaringen är egenskapen Handle inte lika med Zero.

Exempel

Följande kodexempel visar hur du skapar ett fönster med ett specifikt operativsystemfönsterklassnamn. Exemplet skapar en klass som ärver från NativeWindow för att åstadkomma detta.

Klassen MyNativeWindow skapar ett nytt fönster med värdet ClassNameBUTTON. Då skapas ett Win32-knappfönster. Knappens plats och storlek anges tillsammans med ytterligare fönsterformat. Klassen visar hur du använder CreateHandle metoden och åsidosätter WndProc metoden för att fånga upp fönstermeddelanden som tas emot. Även om exemplet letar efter WM_ACTIVATEAPP meddelande kan detta ersättas i ett verkligt program med fönstermeddelanden som är specifika för den typ som skapats.

Note

Vissa kontrolltyper skickar sina fönstermeddelanden till det överordnade fönstret i stället för till fönstret. Mer information finns i Windows Platform 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

Kommentarer

Parametern cp anger de värden som skickas till den interna Win32-metoden CreateWindowEx för att skapa ett fönster och dess handtag.

När fältet ClassName inte nullär ärver det nyligen skapade fönsterhandtaget från den angivna klassen. Om ClassName till exempel är inställt BUTTONpå baseras det nyligen skapade fönstret på win32-fönsterklassen BUTTON . Egenskapen Param för ClassName objektet måste antingen vara null eller referera till en instans av en klass som har deklarerats som en struktur.

Den här koden är ett utdrag från exemplet som visas i klassöversikten NativeWindow . En del kod visas inte i korthetssyfte. Se NativeWindow för hela kodlistan.

Note

Det angivna klassnamnet är registrerat i operativsystemet.

Gäller för

Se även