Share via


NativeWindow.CreateHandle(CreateParams) Metoda

Definice

Vytvoří okno a jeho popisovač se zadanými parametry vytváření.

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)

Parametry

cp
CreateParams

A CreateParams , který určuje parametry vytvoření pro toto okno.

Výjimky

Při pokusu o vytvoření nativního okna operačnímu systému došly prostředky.

Nativní rozhraní API systému Windows nemohlo vytvořit zadané okno.

Popisovač aktuálního nativního okna je již přiřazen; ve vysvětlení se Handle vlastnost nerovná Zero.

Příklady

Následující příklad kódu ukazuje vytvoření okna s konkrétním názvem třídy okna operačního systému. Příklad vytvoří třídu, která dědí z NativeWindow , aby to bylo možné.

Třída MyNativeWindow vytvoří nové okno s nastavenou ClassName na BUTTON. Tím se vytvoří okno tlačítka Win32. Nastaví se umístění a velikost tlačítka spolu s určením dalších stylů oken. Třída ukazuje, jak použít metodu CreateHandle a přepsat metodu WndProc k zachycení přijatých zpráv okna. I když příklad hledá WM_ACTIVATEAPP zprávu, lze ji ve skutečném programu nahradit zprávami okna specifickými pro typ vytvoření.

Poznámka

Některé typy ovládacích prvků odesílají zprávy okna do nadřazeného okna místo do okna. Další informace najdete v 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

Poznámky

Parametr cp určuje hodnoty, které se předávají nativní metodě Win32 CreateWindowEx k vytvoření okna a jeho popisovače.

ClassName Pokud pole není null, nově vytvořený popisovač okna dědí ze zadané třídy. Pokud je například ClassName nastavena na BUTTON, nově vytvořené okno je založeno na třídě okna Win32 BUTTON . Vlastnost Param objektu ClassName musí být null nebo odkazovat na instanci třídy, která byla deklarována jako struktura.

Tento kód je výňatek z příkladu zobrazeného v přehledu NativeWindow třídy. Některý kód se nezobrazuje kvůli stručnosti. Celý výpis kódu najdete na stránce NativeWindow .

Poznámka

Zadaný název třídy je zaregistrovaný v operačním systému.

Platí pro

Viz také