Lire en anglais

Partager via


NativeWindow Classe

Définition

Fournit une encapsulation de niveau inférieur d'un handle de fenêtre et d'une procédure de fenêtre.

public class NativeWindow : MarshalByRefObject
public class NativeWindow : MarshalByRefObject, System.Windows.Forms.IWin32Window
Héritage
NativeWindow
Implémente

Exemples

L’exemple de code suivant illustre l’interception des messages de fenêtre du système d’exploitation dans une procédure de fenêtre et la création d’une fenêtre avec un nom de classe de fenêtre de système d’exploitation spécifique. L’exemple crée deux classes qui héritent de NativeWindow cette opération.

La MyNativeWindowListener classe se connecte à la procédure de fenêtre du formulaire passé au constructeur et remplace la WndProc méthode pour intercepter le message de fenêtre WM_ACTIVATEAPP . La classe illustre l’utilisation des AssignHandle méthodes et ReleaseHandle pour identifier le handle de fenêtre que NativeWindow va utiliser. Le handle est attribué en fonction des Control.HandleCreated événements et Control.HandleDestroyed . Lorsque le WM_ACTIVATEAPP message de fenêtre est reçu, la classe appelle la form1.ApplicationActivated méthode .

La MyNativeWindow classe crée une fenêtre avec la ClassName valeur définie sur BUTTON. La classe illustre l’utilisation de la CreateHandle méthode et la substitution de la WndProc méthode pour intercepter les messages de fenêtre qui sont reçus.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace NativeWindowApplication
{
    // Summary description for Form1.
    public class Form1 : System.Windows.Forms.Form
    {
        private MyNativeWindowListener nwl;
        private MyNativeWindow nw;

        internal void ApplicationActivated(bool ApplicationActivated)
        {
            // The application has been activated or deactivated
            System.Diagnostics.Debug.WriteLine("Application Active = " + ApplicationActivated.ToString());
        }

        private Form1()
        {
            this.Size = new System.Drawing.Size(300, 300);
            this.Text = "Form1";

            nwl = new MyNativeWindowListener(this);
            nw = new MyNativeWindow(this);
        }

        // The main entry point for the application.
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }
    }

    // NativeWindow class to listen to operating system messages.
    internal class MyNativeWindowListener : NativeWindow
    {
        // Constant value was found in the "windows.h" header file.
        private const int WM_ACTIVATEAPP = 0x001C;

        private Form1 parent;

        public MyNativeWindowListener(Form1 parent)
        {

            parent.HandleCreated += new EventHandler(this.OnHandleCreated);
            parent.HandleDestroyed += new EventHandler(this.OnHandleDestroyed);
            this.parent = parent;
        }

        // Listen for the control's window creation and then hook into it.
        internal void OnHandleCreated(object sender, EventArgs e)
        {
            // Window is now created, assign handle to NativeWindow.
            AssignHandle(((Form1)sender).Handle);
        }
        internal void OnHandleDestroyed(object sender, EventArgs e)
        {
            // Window was destroyed, release hook.
            ReleaseHandle();
        }

        protected override void WndProc(ref Message m)
        {
            // Listen for operating system messages

            switch (m.Msg)
            {
                case WM_ACTIVATEAPP:

                    // Notify the form that this message was received.
                    // Application is activated or deactivated, 
                    // based upon the WParam parameter.
                    parent.ApplicationActivated(((int)m.WParam != 0));

                    break;
            }
            base.WndProc(ref 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);
        }
    }
}

Remarques

Cette classe gère automatiquement la création et l’inscription de classes de fenêtre.

Une fenêtre n’est pas éligible au garbage collection lorsqu’elle est associée à un handle de fenêtre. Pour garantir un garbage collection approprié, les handles doivent être détruits manuellement à l’aide DestroyHandle de ou libérés à l’aide de ReleaseHandle.

Notes

La ReleaseHandle méthode est appelée lorsque le message WM_NCDESTROY est traité. Cela signifie qu’il existe des cas dans lesquels vous n’avez pas besoin d’appeler ReleaseHandlemanuellement , mais il est recommandé de le faire.

La NativeWindow classe fournit les propriétés et méthodes suivantes pour gérer les handles : Handle, CreateHandle, AssignHandle, DestroyHandleet ReleaseHandle.

Constructeurs

NativeWindow()

Initialise une instance de la classe NativeWindow.

Propriétés

Handle

Obtient le handle de la fenêtre.

Méthodes

AssignHandle(IntPtr)

Assigne un handle à la fenêtre.

CreateHandle(CreateParams)

Crée une fenêtre et son handle avec les paramètres de création spécifiés.

CreateObjRef(Type)

Crée un objet contenant toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.

(Hérité de MarshalByRefObject)
DefWndProc(Message)

Appelle la procédure de fenêtre par défaut associée à la fenêtre.

DestroyHandle()

Détruit la fenêtre et son handle.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
Finalize()

Libère les ressources associées à la fenêtre.

FromHandle(IntPtr)

Récupère la fenêtre associée au handle spécifié.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetLifetimeService()
Obsolète.

Récupère l'objet de service de durée de vie en cours qui contrôle la stratégie de durée de vie de cette instance.

(Hérité de MarshalByRefObject)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
InitializeLifetimeService()
Obsolète.

Obtient un objet de service de durée de vie pour contrôler la stratégie de durée de vie de cette instance.

(Hérité de MarshalByRefObject)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
MemberwiseClone(Boolean)

Crée une copie superficielle de l'objet MarshalByRefObject actuel.

(Hérité de MarshalByRefObject)
OnHandleChange()

Spécifie une méthode de notification qui est appelée quand le handle d'une fenêtre est modifié.

OnThreadException(Exception)

En cas de substitution dans une classe dérivée, cette méthode gère une exception de thread non gérée.

ReleaseHandle()

Libère le handle associé à la fenêtre.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
WmDpiChangedAfterParent(Message)

Fournit une encapsulation de niveau inférieur d'un handle de fenêtre et d'une procédure de fenêtre.

WmDpiChangedBeforeParent(Message)

Fournit une encapsulation de niveau inférieur d'un handle de fenêtre et d'une procédure de fenêtre.

WndProc(Message)

Appelle la procédure de fenêtre par défaut associée à la fenêtre.

S’applique à

Produit Versions
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9

Voir aussi