2

Visual Basic 4 の AddressOf に相当するものはありますか?

VB4 で動作するフォームのシステム メニューにメニュー項目を追加する Visual Basic 5/6 コードを取得しようとしています。以下は、コンパイルされないコード スニペットです。

'Add Custom Menu To System Menu
Call AppendMenu(GetSystemMenu(Me.hWnd, 0&), MF_SEPARATOR, 0&, vbNullString)
Call AppendMenu(GetSystemMenu(Me.hWnd, 0&), MF_STRING, IDM_SYSTEMTRAY, "Minimize To &System Tray")
Call AppendMenu(GetSystemMenu(Me.hWnd, 0&), MF_STRING, IDM_ABOUT, "&About...")
procOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)

モジュールの API 宣言は次のとおりです。

' Win32 API
Public Const MF_SEPARATOR = &H800&
Public Const MF_STRING = &H0&
Public Const GWL_WNDPROC = (-4)
Public Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const WM_SYSCOMMAND = &H112

' User Created
Public procOld As Long
Public Const IDM_ABOUT As Long = 1010
Public Const IDM_SYSTEMTRAY As Long = 1011

そして最後に、WindowProc のコード:

Public Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case iMsg
        Case WM_SYSCOMMAND
            Select Case wParam
                Case IDM_ABOUT
                   MsgBox "About goes here..."
                   Exit Function
               Case IDM_SYSTEMTRAY
                   MsgBox "Send to system tray code goes here..."
                   Exit Function
            End Select
    End Select
    ' Pass all messages on to VB and then return the value to windows
    WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
End Function

私のフォームのシステムメニューにアイテムを追加するための他のポインターまたは代替方法も高く評価されます!

4

1 に答える 1

2

差出人: Xtreme VB トーク: AddressOf VB4 の回避策

[Banjo] C で書かれた何らかの外部 DLL に頼らなければできないと思います。

[OnErr0r] Matt Curland がちょうどそのような dll を書きました。vb5/6 でも機能するクラス関数のアドレスを取得できます。

callback.zip登録後、上記ページからダウンロードできます。フォールバックとして、次のファイルを取得できます: callback.zip

編集: このソース コードはMatt Curlandによる本の一部であり、著作権で保護されているように見えるため、直接ダウンロード リンクは削除されました。

于 2012-07-15T11:00:15.863 に答える