VB6+XP环境下,如何使用API函数动态创建菜单?
发布网友
发布时间:2023-07-16 14:50
我来回答
共1个回答
热心网友
时间:2023-07-31 09:29
请右击测试效果
动态创建菜单,鼠标右键弹出菜单,执行对应鼠标事件
'窗体
Option Explicit
Private Sub Form_Load()
hMenu = CreateMenu()
hmenupopup = CreatePopupMenu()
result = AppendMenu(hmenupopup, MF_STRING, 300, "新建")
result = AppendMenu(hmenupopup, MF_STRING, 301, "保存")
result = AppendMenu(hmenupopup, MF_STRING, 302, "另存为")
result = AppendMenu(hMenu, MF_POPUP, hmenupopup, "文件")
oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf OnMenu
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 hmenupopup, 0, p.x, p.y, 0, Me.hWnd, r
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, oldwinproc
End Sub
'模块
Option Explicit
Public Declare Function CreateMenu Lib "user32" () 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 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 CreatePopupMenu Lib "user32" () 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Const MF_STRING = &H0&
Public Const MF_POPUP = &H10&
Public Const WM_USER = &H400
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 Const GWL_WNDPROC = (-4)
Public hMenu As Long
Public hmenupopup As Long
Public result As Long
Public oldwinproc As Long
Public Const WM_COMMAND = &H111
Public Function OnMenu(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg
Case WM_COMMAND
Select Case wParam
Case 300
MsgBox "u select new", vbInformation, "hello, world!"
Case 301
MsgBox "u select save", vbInformation, "hello, world!"
Case 302
MsgBox "u select save as", vbInformation, "hello, world!"
End Select
End Select
OnMenu = CallWindowProc(oldwinproc, hWnd, wMsg, wParam, lParam)
End Function
如何用vb6在xp下使用XP STYLE
动态创建菜单,鼠标右键弹出菜单,执行对应鼠标事件 '窗体 Option Explicit Private Sub Form_Load()hMenu = CreateMenu()hmenupopup = CreatePopupMenu()result = AppendMenu(hmenupopup, MF_STRING, 300, "新建")result = AppendMenu(hmenupopup, MF_STRING, 301, "保存")result = AppendMenu(hmenupop...
怎样使程序中的API函数LoadImage在VB6集成开发环境下调试运行时也能从...
Private Declare Function LoadImage1 Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal...
如何解决下载的一个VB6.0老提示“运行安装程序前,必须首先运行安装向 ...
程序 -> 开始 -> 运行 -> 输入 regedit 然后回车。删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\下面的所有信息。把VisualStudio这个文件夹也一起删。然后再运行setup.exe。Visual Basic 是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类...
请教请教,200分,问哪位大侠知道VB6程序如何隐藏于启动栏?
要先建立菜单如下图片 'Traymenu 主菜单 'menuexit 次菜单 '打开一个新的窗体加上菜单后复制粘贴下面代码即可.Option Explicit Const MAX_TOOLTIP As Integer = 64 Const NIF_ICON = &H2 Const NIF_MESSAGE = &H1 Const NIF_TIP = &H4 Const NIM_ADD = &H0 Const NIM_DELETE = &H2...
高分悬赏!如何将vb6的风格转换为xp风格?满意的话还会加分!
第二种方法就是自己制作需要的风格的控件,不过制作起来相当的麻烦.第三种,就是现在想给您推荐的方案,下载一个eXeScope软件,这个软件是查和改写exe,dll,ocx等资源的一个小工具,假如你写的程序名生成的为123.exe 你就用eXeScope打开它,然后编辑菜单中有个xp样式,选成它,然后确定保存,你的程序就是xp...
在vb6.0里面如何使用api函数是计算机关机?
第一个参数的可用值 uFlags Long,指定下述一个或多个标志(用OR运算符合并到一起)EWX_FORCE 强迫中止没有响应的进程 EWX_LOGOFF 中止进程,然后注销 EWX_SHUTDOWN 关掉系统电源(如果可能的话,ATX电源就可以)EWX_REBOOT 重新引导系统 EWX_SHUTDOWN 关闭系统 第二个参数设置为0 即可。完整的代码...
请问vb6.0中打开exe文件的代码如何编写啊?
还是打开EXE进程?--- 调用外部EXE文件 有两个API 一个是:ShellExecute()一个是:WinExec()--- ShellExecute函数原型及参数含义如下:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;●hWnd:用于指定父窗口句柄。当函数...
怎样才能在VB6.0 中连接Access 2003数据库
VB6.0的数据库编程方面按其难易程度可分为三类(由易到难);1.使用数据库控制项和绑定控制项 2.使用数据库对象变量进行编程 3.直接调用ODBC2.0API 在使用VB进行数据库编程时,通常,会首先选择三种基本方法之一来进行数据库应用程序的方案设计, 现在就将以上三种设计方法的适应范围及其优缺点进行一个比较...
VB是什么?
通过动态数据交换(DDE)编程技术VB开发应用能和其他Windows应用的间建立数据通信通过动态 链接库技术在VB中可方便地用C语言或汇编语言编写也可Windows应用接口(.API)lO.联机帮助功能 在VB中利用帮助菜单和F1功能键用户可随时方便地得到所需要帮助信息VB帮助窗口中显示了有 已赞过 已踩过< 你对这个回答的评价是? 评...
vb语言的特点
2、无原生支持多线程 Visual Basic 对于多线程无原生支持,只能通过Windows API的调用实现,且极其的不稳定。因为在API创建的线程中,并没有自动初始化运行时库,导致部分的函数无法使用。一般的,在VB6等早期的VB开发环境下,使用API创建线程的目的是完成容易使程序假死的大量数据或者逻辑的计算。3、异常...