İngilizce dilinde oku

Aracılığıyla paylaş


NativeWindow Sınıf

Tanım

Bir pencere tutamacının ve pencere yordamının alt düzey kapsüllemesini sağlar.

C#
public class NativeWindow : MarshalByRefObject
C#
public class NativeWindow : MarshalByRefObject, System.Windows.Forms.IWin32Window
Devralma
NativeWindow
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ış BUTTONyeni 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.

C#
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);
        }
    }
}

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.

Şunlara uygulanır

Ürün Sürümler
.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, 10

Ayrıca bkz.