다음을 통해 공유


NativeWindow.ReleaseHandle 메서드

정의

이 창과 연결된 핸들을 해제합니다.

public:
 virtual void ReleaseHandle();
public virtual void ReleaseHandle();
abstract member ReleaseHandle : unit -> unit
override this.ReleaseHandle : unit -> unit
Public Overridable Sub ReleaseHandle ()

예제

다음 코드 예제에서는 창 프로시저에서 운영 체제 창 메시지를 가로채는 방법을 보여 줍니다. 이 예제에서는 이 작업을 수행하기 위해 상속되는 클래스를 NativeWindow 만듭니다.

클래스는 MyNativeWindowListener 생성자에 전달된 폼의 창 프로시저에 후크하고 창 메시지를 가로채도록 메서드를 재정 WndProcWM_ACTIVATEAPP 합니다. 이 클래스는 사용할 창 핸들을 AssignHandle 식별하기 위해 메서드와 ReleaseHandle 메서드를 사용하는 방법을 NativeWindow 보여 줍니다. 핸들은 이벤트 및 Control.HandleDestroyed 이벤트에 따라 Control.HandleCreated 할당됩니다. WM_ACTIVATEAPP 창 메시지를 받으면 클래스가 메서드를 호출합니다form1.ApplicationActivated.

이 코드는 클래스 개요에 표시된 예제에서 발췌한 NativeWindow 것입니다. 간결성을 위해 일부 코드가 표시되지 않습니다. 전체 코드 목록을 참조하세요 NativeWindow .

// 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 );
   }

};
// 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);
    }
}
' 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

설명

이 메서드는 창 핸들을 삭제하지 않습니다. 대신 핸들의 창 프로시저를 기본 창 프로시저로 설정합니다. 속성을 0으로 설정하고 Handle 변경 사항을 반영하도록 호출 OnHandleChange 합니다.

Windows가 핸들을 제거했음을 나타내는 네이티브 Win32 WM_NCDESTROY 메시지를 받으면 창에서 이 메서드를 자동으로 호출합니다.

적용 대상

추가 정보