怎样给菜单中的某一项动态的添加内容。谢谢!!!

valiant 2000-09-06 09:28:00
怎样给菜单中的某一项动态的添加内容。
...全文
219 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
57799关注!
shines77 2000-09-08
  • 打赏
  • 举报
回复
valiant:

我的方法只是举个例子,看来你没看懂或API知识太少。

AppendMenu hMenu, MF_CHECKED, ByVal 0&, "TrackPopupMenu"

中的hMenu为菜单的句柄,你只要知道句柄就可以任意添加你的菜单了,也可以插入,用InsertMenu(),例:

Private Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Long) As Long

'【说明】取得窗口中一个菜单的句柄

hMenu=GetMenu(Me.Hwnd)

AppendMenu hMenu, MF_STRING, ByVal 0&, "Hello !"

其实用数组控件(目录)也是很方便的,就是:

假如 存在 MenuItem(0) '是菜单

可以用 Load MenuItem(n) 'n>=1 来动态生成。

我确实没有讲明,我是给你锻炼的机会,如果你的有麻烦或想偷懒,给我来信,email: wokss@yeah.net。

valiant 2000-09-08
  • 打赏
  • 举报
回复
shines 说的我试了,
这种方法是建弹出式的菜单,我想动态创建菜单栏。
icdcore 说的方法有道理,不过我怎么去做。

谢谢以上给我答复的网友。谢谢!!
0xFFCD 2000-09-07
  • 打赏
  • 举报
回复
用控件数组来实现
我建议你去http://lovevb.2699.com,里面有几种方法和控件
icecore 2000-09-07
  • 打赏
  • 举报
回复
首先,你要用appendmenu去在菜单栏上加上你要生成的菜单(你加入的动态菜单的ID们一定要可以和静态的菜单的ID们区别开),然后就是怎样作这些菜单的消息处理了:
你可以重载拥有这个菜单栏的类(比如:子框架类)的OnCmdMsg函数,在这里要判断如果得到的消息的ID是你设的那些动态菜单的ID,就相应处理(就是一个Switch阿)。

大致上就是这样。另外,如果你是在右键菜单中加入动态菜单消息,还可以用TrackPopupMenu的参数TPM_RETURNCMD使该函 数 不 发 送 菜 单 消 息 通 知 应 用 程 序。TPM_RETURNCMD 的 作 用 是 使 函 数 将 本 该 发 送 出 去 的 菜 单 消 息 作 为 返 回 值 返 回。 这 时 函 数 的 返 回 值 是UINT 类 型 的, 就 是 选 中 的 菜 单ID。然后,你自然可以根据返回值来个Switch了。
shines77 2000-09-07
  • 打赏
  • 举报
回复
关于 AppendMenu (API)的使用, 看了自然会明白,不明白我也没办法了:

Const MF_CHECKED = &H8&
Const MF_APPEND = &H100&
Const TPM_LEFTALIGN = &H0&
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private 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, ByVal lprc As Any) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert 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 Any) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim hMenu As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Create an empty popupmenu
hMenu = CreatePopupMenu()
'Append a few menu items
AppendMenu hMenu, MF_STRING, ByVal 0&, "Hello !"
AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, ByVal 0&, "Testing ..."
AppendMenu hMenu, MF_SEPARATOR, ByVal 0&, ByVal 0&
AppendMenu hMenu, MF_CHECKED, ByVal 0&, "TrackPopupMenu"
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Pt As POINTAPI
'Get the position of the mouse cursor
GetCursorPos Pt
If Button = 1 Then
'Show our popupmenu
TrackPopupMenu hMenu, TPM_LEFTALIGN, Pt.x, Pt.y, 0, Me.hwnd, ByVal 0&
Else
'Show our form's default popup menu
TrackPopupMenu GetSystemMenu(Me.hwnd, False), TPM_LEFTALIGN, Pt.x, Pt.y, 0, Me.hwnd, ByVal 0&
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Destroy our menu
DestroyMenu hMenu
End Sub
Un1 2000-09-06
  • 打赏
  • 举报
回复
AppendMenu API
shines77 2000-09-06
  • 打赏
  • 举报
回复
假如 存在 MenuItem(0) '是菜单

可以用 Load MenuItem(n) 'n>=1 来动态生成。

7,763

社区成员

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

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