NativeWindow Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir pencere tutamacının ve pencere yordamının alt düzey kapsüllemesini sağlar.
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
- Devralma
- Uygulamalar
Örnekler
Aşağıdaki kod örneği, bir pencere yordamında işletim sistemi pencere iletilerini kesmeyi ve belirli bir işletim sistemi pencere sınıfı adına sahip bir pencere oluşturmayı gösterir. Örnek, bunu başaran sınıfından NativeWindow devralan iki sınıf oluşturur.
MyNativeWindowListener
sınıfı, oluşturucuya geçirilen formun pencere yordamına takılır ve pencere iletisini kesmek WM_ACTIVATEAPP
için yöntemini geçersiz kılarWndProc. sınıfı, kullanacağı pencere tanıtıcısını AssignHandle tanımlamak için ve ReleaseHandle yöntemlerinin NativeWindow kullanımını gösterir. Tanıtıcı, ve Control.HandleDestroyed olaylarına Control.HandleCreated göre atanır.
WM_ACTIVATEAPP
Pencere iletisi alındığında, sınıfı yöntemini çağırırform1.ApplicationActivated
.
sınıfı, MyNativeWindow
olarak ayarlanmış BUTTON
yeni bir pencere ClassName oluşturur. sınıfı, alınan pencere iletilerini kesmek için yöntemini kullanmayı CreateHandle ve yöntemini geçersiz kılmayı WndProc gösterir.
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
Açıklamalar
Bu sınıf, pencere sınıfı oluşturma ve kaydetmeyi otomatik olarak yönetir.
Pencere, bir pencere tutamacı ile ilişkilendirildiğinde çöp toplama için uygun değildir. Doğru çöp toplamayı sağlamak için, tanıtıcıların kullanılarak el ile yok edilmesi veya kullanılarak DestroyHandleReleaseHandleserbest bırakılması gerekir.
Not
ReleaseHandle WM_NCDESTROY iletisi işlendiğinde yöntemi çağrılır. Bu, el ile çağrısı ReleaseHandleyapmanız gerekmeyen durumlar olduğu anlamına gelir, ancak bunu yapmak iyi bir uygulamadır.
NativeWindow sınıfı, tanıtıcıları yönetmek için aşağıdaki özellikleri ve yöntemleri sağlar: Handle, CreateHandle, AssignHandle, DestroyHandleve ReleaseHandle.
Oluşturucular
NativeWindow() |
NativeWindow sınıfının örneğini başlatır. |
Özellikler
Handle |
Bu pencerenin tutamacını alır. |
Yöntemler
AssignHandle(IntPtr) |
Bu pencereye bir tanıtıcı atar. |
CreateHandle(CreateParams) |
Belirtilen oluşturma parametreleriyle bir pencere ve tutamacını oluşturur. |
CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
DefWndProc(Message) |
Bu pencereyle ilişkili varsayılan pencere yordamını çağırır. |
DestroyHandle() |
Pencereyi ve tutamacını yok eder. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
Finalize() |
Bu pencereyle ilişkili kaynakları serbest bırakır. |
FromHandle(IntPtr) |
Belirtilen tanıtıcıyla ilişkili pencereyi alır. |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
OnHandleChange() |
Bir pencerenin tutamacı değiştirildiğinde çağrılan bir bildirim yöntemini belirtir. |
OnThreadException(Exception) |
Türetilmiş bir sınıfta geçersiz kılındığında, işlenmeyen bir iş parçacığı özel durumunu yönetir. |
ReleaseHandle() |
Bu pencereyle ilişkili tanıtıcıyı serbest bırakır. |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
WmDpiChangedAfterParent(Message) |
Bir pencere tutamacının ve pencere yordamının alt düzey kapsüllemesini sağlar. |
WmDpiChangedBeforeParent(Message) |
Bir pencere tutamacının ve pencere yordamının alt düzey kapsüllemesini sağlar. |
WndProc(Message) |
Bu pencereyle ilişkili varsayılan pencere yordamını çağırır. |