2011/10/04

access2010 VSTOアプリケーションアドイン -6-

Access.Applicationオブジェクトにはイベントがない。
どうすべきなのだろうか整理しながら考える。あれこれ調べてちょこっと確認中、NativeWindowクラスを使ってWindowsメッセージを監視することになりそうな感じ。

Imports System.Windows.Forms
Imports System.Diagnostics
Public Class SubclassHWND
    Inherits NativeWindow

    Const WM_GETTEXT As Integer = &HD
    Const WM_SETTEXT As Integer = &HC
    Const WM_CLOSE As Integer = &H10
    Const WM_PAINT As Integer = &HF
    Const WM_SETCURSOR As Integer = &H20
    Const WM_WINDOWPOSCHANGING As Integer = &H46

    Protected Overrides Sub WndProc(ByRef m As Message)
        Select Case m.Msg
            Case WM_CLOSE
                ReleaseHandle()
                If Globals.ThisAddIn.Application.CurrentProject.FullName.Length > 0 Then
                    Globals.ThisAddIn.Application.CloseCurrentDatabase()
                End If
                Globals.ThisAddIn.Application.Quit()
                Return
            Case Else
                Debug.WriteLine(m.ToString)
        End Select
        MyBase.WndProc(m)
    End Sub
End Class
Public Class ThisAddIn

    Private s As SubclassHWND

    Private Sub ThisAddIn_Startup() Handles Me.Startup
        s = New SubclassHWND
        s.AssignHandle(New IntPtr(Me.Application.hWndAccessApp))
    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        If s.Handle <> IntPtr.Zero Then
            s.ReleaseHandle()
        End If
    End Sub
End Class
使っていこうかやめとこうか、必要になった時改めて考えるとしよう。

0 件のコメント: