API编程高手前来收分

小牛 2001-05-20 11:27:00
AppendMenu(hSysMenu, MF_STRING, IDM_ABOUT, App.ProductName & " v" & App.Major & "." & App.Minor)

请教:给窗体控制菜单加一个自定义的菜单,如上,如果控制自定义菜单响应点击事件
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小牛 2001-05-21
  • 打赏
  • 举报
回复
解决问题,感谢一楼、二楼。
playyuer 2001-05-21
  • 打赏
  • 举报
回复
'如果再控制"系统菜单":
'窗体模块 Form1:
'菜单 系统控制菜单、MenuFile、MenuFileNew
Option Explicit
Private Sub Form_Load()
OldWindowProcFrm = GetWindowLong(Me.hWnd, GWL_WNDPROC)
AppendMenu GetSubMenu(GetMenu(Me.hWnd), 0), MF_STRING, 3001, "MenuAappend"
AppendMenu GetSystemMenu(Me.hWnd, False), MF_STRING, 2001, "SysMenuAppend"
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage
End Sub
Private Sub Form_Unload(Cancel As Integer)
If OldWindowProcFrm <> GetWindowLong(Me.hWnd, GWL_WNDPROC) Then
SetWindowLong Me.hWnd, GWL_WNDPROC, OldWindowProcFrm
End If
End Sub

'标准模块 Module1:
Option Explicit
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 GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) 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 Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

Private Const WM_COMMAND = &H111
Private Const WM_SYSCOMMAND = &H112

Public Const MF_STRING = &H0&
Public Const GWL_WNDPROC = (-4)

Public OldWindowProcFrm As Long
Public Function SubClass1_WndMessage(ByVal hWnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
Select Case Msg
Case WM_COMMAND
Select Case wp
Case 3001
MsgBox "MenuAppend"
SubClass1_WndMessage = True
Case Else
SubClass1_WndMessage = CallWindowProc(OldWindowProcFrm, hWnd, Msg, wp, lp)
End Select
Case WM_SYSCOMMAND
Select Case wp
Case 2001
MsgBox "SysMenyAppend"
SubClass1_WndMessage = True
Case Else
SubClass1_WndMessage = CallWindowProc(OldWindowProcFrm, hWnd, Msg, wp, lp)
End Select
Case Else
SubClass1_WndMessage = CallWindowProc(OldWindowProcFrm, hWnd, Msg, wp, lp)
End Select
End Function
foxmsdn 2001-05-21
  • 打赏
  • 举报
回复
利用字类技术截获窗体消息。如需源程序,请email foxmsdn@21cn.com
turbo 2001-05-21
  • 打赏
  • 举报
回复
处理点击消息

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧