winapi - VB4 AddressOf 等效项(向系统菜单添加项目)

标签 winapi vb6

Visual Basic 4 中是否有与 AddressOf 等效的函数?

我正在尝试获取一些 Visual Basic 5/6 代码,将菜单项添加到在 VB4 中工作的窗体的系统菜单。下面是无法编译的代码片段:

'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

任何其他将项目添加到我的表单系统菜单的指针或替代方法也将不胜感激!

最佳答案

来自:Xtreme VB Talk: AddressOf work around for vb4

[Banjo] I don't think that you can without resorting to somesort of outside DLL written in C.

[OnErr0r] Matt Curland wrote just such a dll. Allows you to get the address of a class function, even works with vb5/6.

注册后您可以从上述页面下载callback.zip作为后备,您可以在此处获取文件:callback.zip

编辑:直接下载链接已被删除,因为该源代码似乎是 Matt Curland 所著书籍的一部分并受版权保护。

关于winapi - VB4 AddressOf 等效项(向系统菜单添加项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11491262/

相关文章:

c# - 使用 C# 禁用窗口的动画效果

ruby - 在 ruby​​ 中使用 GetDIBits 函数时遇到问题

c++ - 识别应用程序的架构

winapi - 如何在子控件上使用 WS_EX_LAYERED

string - VB6: "string = string * integer"是做什么的?

.net - 如何避免出现以下错误: "Automation Error. It is illegal to call out while inside message filter "?

delphi - 有没有办法通过Windows API获取VCL控件的名称?

sql-server - 如何减去sql中的前一行?

vb6 - 获取列表框中的选定项

MySQL 连接在 vb6 上获取 "Run-time error -2147467259 (80004005)"但适用于 VBA Excel