在VB6.0中如何在运行时动态添加/修改菜单?

dzgld 2008-01-18 08:39:49
举例来说,建立一个菜单,点击时显示某文件夹下的所有文件列表,因为文件数量不确定,有可能很多,所以无法在菜单编辑器中预先生成而仅用visible属性来控制,必须在运行时用代码完成。我在网上搜索了一下,好像是用creatmenu或appendmenu等函数,但都语焉不详,csdn中也没有相关说明。
请大侠指点迷津,并请说明此动态生成的菜单如何响应onclick事件?
如果有代码范例就更好了!谢谢!
...全文
506 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sandrer 2008-01-20
  • 打赏
  • 举报
回复
嘿,我支持楼上老马的意见!!!!!

我就是嫌C++太麻烦了,代码太多,所以才开始学用VB
现在随便去买一台电脑,资源一般都比较多(如果这电脑只用来单一运行你的程序,那更多),VB就算怎么开销大也能够应付,使用者一般都不会怎么在意!!!
东方之珠 2008-01-19
  • 打赏
  • 举报
回复
用API要快些吧
Sandrer 2008-01-19
  • 打赏
  • 举报
回复
你试试看用你的程序和用我上面这个API的程序看哪个更快些
Sandrer 2008-01-19
  • 打赏
  • 举报
回复

Const MF_STRING = &H0&
Const MF_POPUP = &H10&
Const MF_BYPOSITION = &H400&

Private hMenu As Long
Private hSubMenu As Long
Private blnMenuCreated As Boolean

Private Declare Function CreateMenu Lib "user32" () As Long
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function SetMenu Lib "user32" (ByVal hWnd As Long, ByVal hMenu As Long) As Long
Private 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

Private Sub Form_Load()
Dim strPath As String
Dim strFile As String
Dim i As Long
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
Show

strPath = InputBox("请输入一个文件夹路径,以便制作菜单", , "C:\Windows")
If Len(Dir(strPath, vbDirectory)) = 0 Then Exit Sub
If Right$(strPath, 1) <> "\" Then strPath = strPath & "\"

hMenu = GetMenu(hWnd)
If hMenu = 0 Then
hMenu = CreateMenu()
blnMenuCreated = True
End If
hSubMenu = CreatePopupMenu()
Call AppendMenu(hMenu, MF_STRING Or MF_BYPOSITION Or MF_POPUP, hSubMenu, strPath)

strFile = Dir(strPath & "*.*")
Do Until Len(strFile) = 0
i = i + 1
Call AppendMenu(hSubMenu, MF_STRING Or MF_BYPOSITION, i, strFile)
strFile = Dir
Loop

If blnMenuCreated Then Call SetMenu(hWnd, hMenu)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call DestroyMenu(hSubMenu)
If blnMenuCreated Then Call DestroyMenu(hMenu)
End Sub
嗷嗷叫的老马 2008-01-19
  • 打赏
  • 举报
回复
VB的内部函数一般都有开销大的问题...高度的封装带来的好处是方便代码编写者

有效率要求的情况下,达到同样的效果的话对VB程序员要求是最高的了
dzgld 2008-01-18
  • 打赏
  • 举报
回复
我是楼主,我已经解决问题了,用Load mnulist(i)即可。
那么creatmenu、appendmenu等函数有什么用,什么时候用到又如何使用呢?
VBToy 2008-01-18
  • 打赏
  • 举报
回复
用数组,菜单中的一项可以看成是一个label或command控件,用数组动态地增加,并且分别控制控件数组中各个元素的属性。

1,488

社区成员

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

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