NativeWindow クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ウィンドウ ハンドルとウィンドウ プロシージャの下位のカプセル化を提供します。
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
- 継承
- 実装
例
次のコード例では、ウィンドウ プロシージャでオペレーティング システム ウィンドウ メッセージをインターセプトし、特定のオペレーティング システム ウィンドウ クラス名を持つウィンドウを作成する方法を示します。 この例では、これを実現する を NativeWindow 継承する 2 つのクラスを作成します。
クラスは MyNativeWindowListener
、コンストラクターに渡されたフォームのウィンドウ プロシージャにフックし、 メソッドを WndProc オーバーライドしてウィンドウ メッセージを WM_ACTIVATEAPP
インターセプトします。 クラスは、 メソッドと ReleaseHandle メソッドを使用して、 がAssignHandle使用するウィンドウ ハンドルを識別する方法をNativeWindow示します。 ハンドルは、 イベントと Control.HandleDestroyed イベントにControl.HandleCreated基づいて割り当てられます。 ウィンドウ メッセージを WM_ACTIVATEAPP
受信すると、 クラスは メソッドを form1.ApplicationActivated
呼び出します。
クラスはMyNativeWindow
、 を に設定して新しいウィンドウをClassNameBUTTON
作成します。 クラスでは、 メソッドを使用し、 CreateHandle メソッドをオーバーライドして WndProc 、受信したウィンドウ メッセージをインターセプトする方法を示します。
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
注釈
このクラスは、ウィンドウ クラスの作成と登録を自動的に管理します。
ウィンドウ ハンドルに関連付けられている場合、ウィンドウはガベージ コレクションの対象になりません。 適切なガベージ コレクションを確保するには、 を使用してハンドルを手動で破棄するか、 を使用 DestroyHandle して ReleaseHandle解放する必要があります。
注意
メソッドは ReleaseHandle 、WM_NCDESTROY メッセージが処理されるときに呼び出されます。 これは、手動で を呼び出 ReleaseHandleす必要がない場合がありますが、これを行うことをお勧めします。
クラスには、ハンドルHandleを管理するためのプロパティとメソッド (、、CreateHandleAssignHandle、DestroyHandle、および ) が用意されていますReleaseHandle。NativeWindow
コンストラクター
NativeWindow() |
NativeWindow クラスのインスタンスを初期化します。 |
プロパティ
Handle |
ウィンドウのハンドルを取得します。 |
メソッド
AssignHandle(IntPtr) |
ウィンドウにハンドルを割り当てます。 |
CreateHandle(CreateParams) |
作成パラメーターを指定してウィンドウとそのハンドルを作成します。 |
CreateObjRef(Type) |
リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。 (継承元 MarshalByRefObject) |
DefWndProc(Message) |
ウィンドウに関連付けられている既定のウィンドウ プロシージャを呼び出します。 |
DestroyHandle() |
ウィンドウとそのハンドルを破棄します。 |
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Finalize() |
ウィンドウに関連付けられているリソースを解放します。 |
FromHandle(IntPtr) |
指定したハンドルに関連付けられているウィンドウを取得します。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetLifetimeService() |
古い.
対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
InitializeLifetimeService() |
古い.
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
OnHandleChange() |
ウィンドウのハンドルが変更されたときに呼び出される通知メソッドを指定します。 |
OnThreadException(Exception) |
派生クラスでオーバーライドされた場合、未処理のスレッド例外を管理します。 |
ReleaseHandle() |
ウィンドウに関連付けられているハンドルを解放します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
WmDpiChangedAfterParent(Message) |
ウィンドウ ハンドルとウィンドウ プロシージャの下位のカプセル化を提供します。 |
WmDpiChangedBeforeParent(Message) |
ウィンドウ ハンドルとウィンドウ プロシージャの下位のカプセル化を提供します。 |
WndProc(Message) |
ウィンドウに関連付けられている既定のウィンドウ プロシージャを呼び出します。 |
適用対象
こちらもご覧ください
.NET