NativeWindow Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit une encapsulation de niveau inférieur d'un handle de fenêtre et d'une procédure de fenêtre.
public ref class NativeWindow : MarshalByRefObject
public ref class NativeWindow : MarshalByRefObject, System::Windows::Forms::IWin32Window
public class NativeWindow : MarshalByRefObject
public class NativeWindow : MarshalByRefObject, System.Windows.Forms.IWin32Window
type NativeWindow = class
inherit MarshalByRefObject
type NativeWindow = class
inherit MarshalByRefObject
interface IWin32Window
Public Class NativeWindow
Inherits MarshalByRefObject
Public Class NativeWindow
Inherits MarshalByRefObject
Implements IWin32Window
- Héritage
- 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 namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Runtime::InteropServices;
ref class MyNativeWindowListener;
ref class MyNativeWindow;
// Summary description for Form1.
ref class Form1: public System::Windows::Forms::Form
{
private:
MyNativeWindowListener^ nwl;
MyNativeWindow^ nw;
internal:
void ApplicationActived( bool ApplicationActivated )
{
// The application has been activated or deactivated
#if defined(DEBUG)
System::Diagnostics::Debug::WriteLine( "Application Active = {0}", ApplicationActivated.ToString() );
#endif
}
public:
Form1();
};
// NativeWindow class to listen to operating system messages.
ref class MyNativeWindowListener: public NativeWindow
{
private:
// Constant value was found in the S"windows.h" header file.
literal int WM_ACTIVATEAPP = 0x001C;
Form1^ parent;
public:
MyNativeWindowListener( Form1^ parent )
{
parent->HandleCreated += gcnew EventHandler( this, &MyNativeWindowListener::OnHandleCreated );
parent->HandleDestroyed += gcnew EventHandler( this, &MyNativeWindowListener::OnHandleDestroyed );
this->parent = parent;
}
internal:
// Listen for the control's window creation and then hook into it.
void OnHandleCreated( Object^ sender, EventArgs^ /*e*/ )
{
// Window is now created, assign handle to NativeWindow.
AssignHandle( (dynamic_cast<Form1^>(sender))->Handle );
}
void OnHandleDestroyed( Object^ /*sender*/, EventArgs^ /*e*/ )
{
// Window was destroyed, release hook.
ReleaseHandle();
}
protected:
virtual void WndProc( Message %m ) override
{
// 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->ApplicationActived( ((int)m.WParam != 0) );
break;
}
NativeWindow::WndProc( m );
}
};
// 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 );
}
};
Form1::Form1()
{
this->Size = System::Drawing::Size( 300, 300 );
this->Text = "Form1";
nwl = gcnew MyNativeWindowListener( this );
nw = gcnew MyNativeWindow( this );
}
// The main entry point for the application.
[STAThread]
int main()
{
Application::Run( gcnew Form1 );
}
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);
}
}
}
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Public Class Form1
Inherits System.Windows.Forms.Form
Private nwl As MyNativeWindowListener
Private nw As MyNativeWindow
Friend Sub ApplicationActivated(ByVal ApplicationActivated As Boolean)
' The application has been activated or deactivated
System.Diagnostics.Debug.WriteLine("Application Active = " + ApplicationActivated.ToString())
End Sub
Private Sub New()
MyBase.New()
Me.Size = New System.Drawing.Size(300, 300)
Me.Text = "Form1"
nwl = New MyNativeWindowListener(Me)
nw = New MyNativeWindow(Me)
End Sub
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
End Class
' NativeWindow class to listen to operating system messages.
Friend Class MyNativeWindowListener
Inherits NativeWindow
' Constant value was found in the "windows.h" header file.
Private Const WM_ACTIVATEAPP As Integer = &H1C
Private parent As Form1
Public Sub New(ByVal parent As Form1)
AddHandler parent.HandleCreated, AddressOf Me.OnHandleCreated
AddHandler parent.HandleDestroyed, AddressOf Me.OnHandleDestroyed
Me.parent = parent
End Sub
' Listen for the control's window creation and hook into it.
Private Sub OnHandleCreated(ByVal sender As Object, ByVal e As EventArgs)
' Window is now created, assign handle to NativeWindow.
AssignHandle(CType(sender, Form).Handle)
End Sub
Private Sub OnHandleDestroyed(ByVal sender As Object, ByVal e As EventArgs)
' Window was destroyed, release hook.
ReleaseHandle()
End Sub
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
Protected Overrides Sub WndProc(ByRef m As Message)
' Listen for operating system messages
Select Case (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(m.WParam.ToInt32() <> 0)
End Select
MyBase.WndProc(m)
End Sub
End Class
' 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
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. |