NativeWindow.CreateHandle(CreateParams) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vytvoří okno a jeho popisovač se zadanými parametry vytvoř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 došlo k výpadku operačního systému prostředků.
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í, Handle vlastnost není rovna 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á zdědí, aby NativeWindow toho dosáhla.
Třída MyNativeWindow vytvoří nové okno s nastavenou na ClassNameBUTTON. Tím se vytvoří okno tlačítka Win32. Umístění a velikost tlačítka je nastavené spolu s určením dalších stylů oken. Třída ukazuje, jak použít metodu CreateHandle a přepsat metodu WndProc k zachycení zpráv okna přijatých. I když příklad hledá WM_ACTIVATEAPP zprávu, může být nahrazena v reálném programu zprávami o oknech specifických pro typ vytvořený.
Poznámka:
Některé typy ovládacích prvků posílají zprávy okna do nadřazeného okna místo okna. Další informace najdete v sadě 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ředají nativní metodě Win32 CreateWindowEx pro vytvoření okna a jeho popisovače.
ClassName Pokud pole není null, nově vytvořený popisovač okna dědí ze zadané třídy. Pokud ClassName je například nastavena BUTTONna , nově vytvořené okno je založeno na win32 BUTTON třídy okna. Vlastnost Param objektu ClassName musí být null buď nebo odkazovat na instanci třídy, která byla deklarována jako struktura.
Tento kód je výňatek z příkladu uvedeného v přehledu NativeWindow třídy. Pro účely stručnosti se nezobrazuje nějaký kód. Podívejte se NativeWindow na celý výpis kódu.
Poznámka:
Zadaný název třídy je registrován v operačním systému.