运行时怎么建立菜单?

wang3358 2009-10-28 03:30:05
如题
...全文
81 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
坎离枫 2009-10-28
  • 打赏
  • 举报
回复
不记得了。不过在一本写Borland的C++Bulider使用技巧的书看到过。大意是把菜单保存为文件,修改时修改文件再加载就行了。我没试过VS里的菜单动态修改。但是有一种方法也许可以:每次添加一个控件又用不来时,就看控件的属性,属性名是什么,在写代码时一般也能用相同的属性名来操作控件。
Flyingdragon168 2009-10-28
  • 打赏
  • 举报
回复
哦,下列方法可以。但不是很好:
首先建一們菜單:比如mnu_File,設置索引為0.
然後在運行時,可以使用Load mnu_file(1) Load mnu_file(2)..等,來建立一系列菜單,但這些建立的菜單,都是同一層次的。如果想不同層次,那就必須分層次的建些類似mnu_file,索引0的菜單。
這種方法以前用過,絕對可行。
king06 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chenjl1031 的回复:]
这个简单:
VB codeOptionExplicit'新建一个子菜单项,命名为subM,在其属性框中将"index"属性修改为0,此时一个菜单数组就创建了!
'之后,就用load和unload方法对菜单数组进行添加或删除操作,subM.Count是获取菜单数组的个数.PrivateSub Command1_Click()
Command2.Enabled=True
Load subM(subM.Count)'用load方法加载菜单 subM(subM.Count-1).Caption= Text1.Text'设置菜单的属性 subM(subM.Count-1).Visible=TrueEnd SubPrivateSub Command2_Click()
Unload subM(subM.Count-1)'删除加载的菜单If subM.Count-1=0Then Command2.Enabled=FalseEnd SubPrivateSub subM_Click(IndexAsInteger)
MsgBox"你单击了"& subM(Index).Caption&"按钮", ,"蓝光BlueShibe"End Sub


http://topic.csdn.net/t/20050714/16/4144690.html
[/Quote]
最开始我想了下用load方法,不过却怀疑load对菜单无效.
东方之珠 2009-10-28
  • 打赏
  • 举报
回复
这个简单:
Option Explicit

'新建一个子菜单项,命名为subM,在其属性框中将"index"属性修改为0,此时一个菜单数组就创建了!
'之后,就用load和unload方法对菜单数组进行添加或删除操作,subM.Count是获取菜单数组的个数.

Private Sub Command1_Click()
Command2.Enabled = True
Load subM(subM.Count) '用load方法加载菜单
subM(subM.Count - 1).Caption = Text1.Text '设置菜单的属性
subM(subM.Count - 1).Visible = True
End Sub

Private Sub Command2_Click()
Unload subM(subM.Count - 1) '删除加载的菜单
If subM.Count - 1 = 0 Then Command2.Enabled = False
End Sub

Private Sub subM_Click(Index As Integer)
MsgBox "你单击了" & subM(Index).Caption & "按钮", , "蓝光BlueShibe"
End Sub



http://topic.csdn.net/t/20050714/16/4144690.html
东方之珠 2009-10-28
  • 打赏
  • 举报
回复
动态菜单用Load装入,用完后用Unload卸载菜单.
舉杯邀明月 2009-10-28
  • 打赏
  • 举报
回复
Ding..............
getemail 2009-10-28
  • 打赏
  • 举报
回复
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 = 2 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
getemail 2009-10-28
  • 打赏
  • 举报
回复
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 = 2 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
wang3358 2009-10-28
  • 打赏
  • 举报
回复
我想通过代码建立个菜单
[Quote=引用 2 楼 king06 的回复:]
事先就建立好菜单,设置不可见,运行时控制其可见与否
[/Quote]
king06 2009-10-28
  • 打赏
  • 举报
回复
事先就建立好菜单,设置不可见,运行时控制其可见与否
getemail 2009-10-28
  • 打赏
  • 举报
回复
结帖率:0.00%

1,486

社区成员

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

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