NativeWindow.CreateHandle Method
Assembly: System.Windows.Forms (in system.windows.forms.dll)
The cp parameter specifies the values that are passed to the native Win32 CreateWindowEx method to create a window and its handle.
When the ClassName field is not a null reference (Nothing in Visual Basic), the newly created window handle inherits from the specified class. For example, if ClassName is set to BUTTON, the newly created window is based on the Win32 BUTTON window class. The Param property of the ClassName object must either be a null reference (Nothing in Visual Basic) or reference an instance of a class that was declared as a structure.
This code is an excerpt from the example shown in the NativeWindow class overview. Some code is not shown for the purpose of brevity. See NativeWindow for the whole code listing.
Note |
|---|
| The class name provided is registered with the operating system. |
The following code example demonstrates creating a window with a specific operating system window class name. The example creates a class that inherits from NativeWindow to accomplish this.
The MyNativeWindow class creates a new window with the ClassName set to BUTTON. This creates a Win32 button window. The location and size of the button is set, along with specifying additional window styles. The class demonstrates how to use the CreateHandle method and override the WndProc method to intercept window messages that are received. Although the example looks for the WM_ACTIVATEAPP message, this can be replaced in a real program with window messages specific to the type created.
Note |
|---|
| Some control types send their window messages to the window parent instead of the window. See the Windows Platform SDK for more information. |
// 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.
/** @attribute SecurityPermissionAttribute(SecurityAction.Demand, Flags=SecurityPermissionFlag.UnmanagedCode)
*/
public class MyNativeWindow extends NativeWindow
{
// Constant values were found in the "windows.h" header file.
private int WS_CHILD = 0x40000000;
private int WS_VISIBLE = 0x10000000;
private int WM_ACTIVATEAPP = 0x1C;
private int windowHandle;
public MyNativeWindow(Form parent)
{
CreateParams cp = new CreateParams();
// Fill in the CreateParams details.
cp.set_Caption("Click here");
cp.set_ClassName("Button");
// Set the position on the form
cp.set_X(100);
cp.set_Y(100);
cp.set_Height(100);
cp.set_Width(100);
// Specify the form as the parent.
cp.set_Parent(parent.get_Handle());
// Create as a child of the specified parent
cp.set_Style(WS_CHILD | WS_VISIBLE);
// Create the actual window
this.CreateHandle(cp);
} //MyNativeWindow
// Listen to when the handle changes to keep the variable in sync
protected void OnHandleChange()
{
windowHandle = this.get_Handle().ToInt32();
} //OnHandleChange
protected void WndProc(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.
if (m.get_Msg() == WM_ACTIVATEAPP) {
// Do something here in response to messages
}
super.WndProc(m);
} //WndProc
} //MyNativeWindow
- UIPermission for safe subwindows to call this method. Associated enumeration: UIPermissionWindow.SafeSubWindows
- UIPermission to create a top-level window. This permission is only demanded if the window style is not a child or if the window does not have a parent. Associated enumeration: UIPermissionWindow.SafeTopLevelWindows
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
Note