Freigeben über


NativeWindow.OnHandleChange-Methode

Gibt eine Benachrichtigungsmethode an, die aufgerufen wird, wenn das Handle für ein Fenster geändert wird.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Protected Overridable Sub OnHandleChange
'Usage

Me.OnHandleChange
protected virtual void OnHandleChange ()
protected:
virtual void OnHandleChange ()
protected void OnHandleChange ()
protected function OnHandleChange ()

Hinweise

Diese Methode wird aufgerufen, wenn der Wert der Handle-Eigenschaft geändert wurde.

Hinweise für Erben Überschreiben Sie diese Methode, um Änderungen des Fensterhandles nachzuverfolgen.

Beispiel

Das folgende Codebeispiel veranschaulicht das Erstellen eines Fensters mit dem Namen einer bestimmten Fensterklasse des Betriebssystems. Im Beispiel wird dafür eine Klasse erstellt, die von NativeWindow erbt. Das Beispiel veranschaulicht auch das Überschreiben der OnHandleChange-Methode, die benachrichtigt wird, wenn das Handle geändert wird.

Die MyNativeWindow-Klasse erstellt ein neues Fenster, wobei der ClassName auf BUTTON festgelegt wird. Dadurch wird ein Win32-Schaltflächenfenster erstellt. Position und Größe der Schaltfläche werden zusammen mit weiteren spezifischen Fensterstilen festgelegt. Die Klasse veranschaulicht das Verwenden der CreateHandle-Methode und das Überschreiben der WndProc-Methode zum Abfangen der empfangenen Fenstermeldungen. Im Beispiel wird nach der WM_ACTIVATEAPP-Meldung gesucht. In einem echten Programm kann sie durch eine spezifische Fenstermeldung für den erstellten Typ ersetzt werden.

Dieser Code ist ein Auszug aus dem Beispiel in der Übersicht zur NativeWindow-Klasse. Teile des Codes wurden zur besseren Übersicht ausgelassen. Den vollständigen Code finden Sie unter NativeWindow.

Hinweis

Einige Steuerelementtypen senden die Fenstermeldungen nicht an das Fenster, sondern an das übergeordnete Fenster. Weitere Informationen finden Sie im 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.
/** @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

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

NativeWindow-Klasse
NativeWindow-Member
System.Windows.Forms-Namespace
Handle
AssignHandle
CreateHandle
DestroyHandle
ReleaseHandle
WndProc