Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe NativeWindow

 

Data di pubblicazione: novembre 2016

Fornisce un incapsulamento di basso livello di un handle di finestra e una routine della finestra.

Spazio dei nomi:   System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

System.Object
  System.MarshalByRefObject
    System.Windows.Forms.NativeWindow

[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, 
	Flags = SecurityPermissionFlag.UnmanagedCode)]
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public class NativeWindow : MarshalByRefObject, IWin32Window

NomeDescrizione
System_CAPS_pubmethodNativeWindow()

Inizializza un'istanza della classe NativeWindow.

NomeDescrizione
System_CAPS_pubpropertyHandle

Ottiene l'handle per la finestra.

NomeDescrizione
System_CAPS_pubmethodAssignHandle(IntPtr)

Assegna un handle alla finestra corrente.

System_CAPS_pubmethodCreateHandle(CreateParams)

Crea una finestra e il relativo handle con i parametri di creazione specificati.

System_CAPS_pubmethodCreateObjRef(Type)

Crea un oggetto che contiene le informazioni necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.(Ereditato da MarshalByRefObject.)

System_CAPS_pubmethodDefWndProc(Message)

Richiama la routine di finestra associata a questa finestra.

System_CAPS_pubmethodDestroyHandle()

Elimina la finestra e il relativo handle.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Rilascia le risorse associate a questa finestra.(Esegue l'override di Object.Finalize().)

System_CAPS_pubmethodSystem_CAPS_staticFromHandle(IntPtr)

Recupera la finestra associata all'handle specificato.

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetLifetimeService()

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.(Ereditato da MarshalByRefObject.)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_pubmethodInitializeLifetimeService()

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.(Ereditato da MarshalByRefObject.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto corrente MarshalByRefObject oggetto.(Ereditato da MarshalByRefObject.)

System_CAPS_protmethodOnHandleChange()

Specifica un metodo di notifica che viene chiamato quando viene modificato l'handle per una finestra.

System_CAPS_protmethodOnThreadException(Exception)

Quando sottoposto a override in una classe derivata, gestisce un'eccezione non gestita di thread.

System_CAPS_pubmethodReleaseHandle()

Rilascia l'handle associato alla finestra.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodWndProc(Message)

Richiama la routine di finestra associata a questa finestra.

Questa classe gestisce automaticamente la registrazione e creazione della classe di finestra.

Una finestra non è idonea per garbage collection quando è associato a un handle di finestra. Per garantire una corretta operazione di garbage collection, gli handle devono essere eliminati manualmente mediante DestroyHandle o rilasciato utilizzando ReleaseHandle.

System_CAPS_noteNota

Il ReleaseHandle viene chiamato quando viene elaborato il messaggio WM_NCDESTROY. Ciò significa che esistono casi in cui non è necessario chiamare manualmente ReleaseHandle, ma è consigliabile effettuare questa operazione.

La NativeWindow classe fornisce le seguenti proprietà e metodi per gestire gli handle: Handle, CreateHandle, AssignHandle, DestroyHandle, e ReleaseHandle.

Esempio di codice riportato di seguito viene illustrato l'intercettazione di messaggi di finestra del sistema operativo in una routine della finestra e la creazione di una finestra con un nome di classe finestra specifico del sistema operativo. Vengono create due classi che ereditano da NativeWindow che tale scopo.

Il MyNativeWindowListener hook della routine della finestra del form passato al costruttore di classe ed esegue l'override di WndProc metodo per intercettare la WM_ACTIVATEAPP finestra di messaggio. La classe illustra l'uso della AssignHandle e ReleaseHandle metodi per identificare l'handle della finestra di NativeWindow verrà utilizzato. L'handle viene assegnato in base al momento di Control.HandleCreated e Control.HandleDestroyed gli eventi. Quando il WM_ACTIVATEAPP finestra di messaggio viene ricevuto, la classe chiama il form1ApplicationActivated metodo.

La MyNativeWindow classe crea una nuova finestra con la ClassName impostato su BUTTON. La classe viene illustrato come utilizzare il CreateHandle (metodo) e si esegue l'override di WndProc metodo per intercettare i messaggi di finestra ricevuti.

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

namespace NativeWindowApplication
{

    // Summary description for Form1.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    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.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    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();
        }
        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        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.
    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
    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
        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        protected override void OnHandleChange()
        {
            windowHandle = (int)this.Handle;
        }

        [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        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);
        }
    }
}

SecurityPermission

for inheriting classes to call unmanaged code. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode

SecurityPermission

for the immediate caller to call unmanaged code. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode

.NET Framework
Disponibile da 1.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: