修改系统菜单,鼠标右健弹出菜单,执行系统菜单事件
(仅供参考)
向系统菜单中添加新项,并且执行对应事件,在窗体任意位置弹出系统菜单,并且执行事件
´窗体
Option Explicit
Private Sub Form_Load()
On Error Resume Next
lhSysMenu = GetSystemMenu(hwnd, 0&)
lRet = AppendMenu(lhSysMenu, MF_SEPARATOR, 0&, vbNullString)
lRet = AppendMenu(lhSysMenu, MF_STRING, IDM_ABOUT, "About...")
Show
ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim r As RECT
Dim p As POINTAPI
If Button = vbRightButton Then
GetCursorPos p
TrackPopupMenu lhSysMenu, 0, p.X, p.Y, 0, Me.hwnd, r
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong hwnd, GWL_WNDPROC, ProcOld
End Sub
´-------------------------------------------------------------
´模块
Option Explicit
Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As RECT) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) 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 AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type POINTAPI
X As Long
Y As Long
End Type
Public ProcOld As Long
Public Const TPM_LEFTALIGN = &H0&
Public Const WM_SYSCOMMAND = &H112
Public Const MF_SEPARATOR = &H800&
Public Const MF_STRING = &H0&
Public Const GWL_WNDPROC = (-4)
Public Const IDM_ABOUT As Long = 1010
Public Const WM_COMMAND = &H111
Public lhSysMenu As Long, lRet As Long
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
If wParam = IDM_ABOUT Then
MsgBox "VB Web Append to System Menu Example", vbInformation, "About"
Exit Function
End If
Case WM_COMMAND
If wParam = IDM_ABOUT Then
MsgBox "VB Web Append to System Menu Example", vbInformation, "About"
Exit Function
Else
CallWindowProc ProcOld, hwnd, WM_SYSCOMMAND, wParam, lParam
WindowProc = 0
Exit Function
End If
End Select
WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam)
End Function
- · 用Visual Basic创建复杂窗体
- · 目录选择对话框
- · 判断字符串是否是合法的EMail
- · 如何发布IE控件
- · VB调用C DLL时的参数传递问题
- · 加载整盘目录到TreeView,注意逐层展开
- · Read a byte, integer or long from memory
- · Read a string at a given address
- · 不用API,也能玩注册表--vb !(downmoon原创)
- · Resize所有控件
- · 输入N个点的坐标,由程序判断该N个点是否能构成一个凸多边形。(VB)
- · 用数组操作字符串
- · UNICODE、DBCS的一点小知识
- · Setparent函数用法技巧
- · PDU格式
- · 在PC上通过手机发送短消息
- · 自动上网抓数据的机器人
- · 一种简单的结束无法关闭的DOS窗口的方法
- · VB中各种数据类型转换函数
- · 浅谈VB中面向对象技术的封装性
- · 实时曲线的绘制和保存
- · Visual Basic 6 逆向工程与反逆向工程 (1)
- · 在PC上通过手机发送短消息(续篇)
- · Visual Basic 6 逆向工程与反逆向工程 (2)
- · 如何在Visual Basic 6.0 中连接加密的Access数据库
- · 使用Visual Basic操纵XML文档
- · 使用VB6.0设计ActiveX DLL事件
- · VB动态调用外部函数的方法
- · 建立一个程序员自己的全国性营销网络
- · 如何编写高质量的VB代码
- · 为更新到Visual Basic.NET准备你的Visual Basic 6.0应用程序
- · 再谈在VB中调用VC++开发的DLL
- · 用VB语言编程实现JPEG数据压缩
- · 用DTS实现SQL数据库的导入
- · vb实现多线程!
- · VB6 自动编译组件
- · 用vb制作ActiveX Dll中,怎么让程序连接远程机器1888端口,并且等待接收信息
- · 以Oracle为例说明如何通过ODBC将数据库中的指定表导出到MDB数据库。
