如下,这是我刚写的:
VB->加一个EXE工程->加一个Form-->加一个菜单项(name:menFile,Index:0)
把下面的代码写入:
Option Explicit
Dim hSecondMenu As Long
Private Sub a_Click(Index As Integer)End SubPrivate Sub Form_Load()
AddtoDynPop
End SubPrivate Sub CreateOwnMenu(ByVal strNodeXML As String)
Dim i As Integer
Dim oDom As New MSXML2.DOMDocument
oDom.loadXML (strNodeXML)
Dim hFirstMenu As Long
Dim lThirdMenu As Long
Dim strTitle As String
Dim hMenu As Long
hMenu = GetMenu(Me.hwnd) If (oDom.documentElement.hasChildNodes = False) Then '无子菜单时,显示菜单
Select Case oDom.documentElement.Attributes.getNamedItem("Level").nodeValue
Case "1":
AddNewMenu hwnd, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue, True
Case "2"
InsertNewSubMenu Me.hwnd, oDom.documentElement.Attributes.getNamedItem("Parent").nodeValue, _
oDom.documentElement.Attributes.getNamedItem("No").nodeValue, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
Case "3"
strTitle = oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
AppendMenu hSecondMenu, MF_STRING, ByVal 0&, strTitle '增加第三级菜单
End Select
Else '有子菜单
Select Case oDom.documentElement.Attributes.getNamedItem("Level").nodeValue
Case "1":
AddNewMenu hwnd, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue, True
Case "2"
hFirstMenu = GetSubMenu(hMenu, oDom.documentElement.Attributes.getNamedItem("Parent").nodeValue)
hSecondMenu = CreatePopupMenu() '创建有第三级菜单的菜单条
For i = 0 To oDom.documentElement.childNodes.length - 1
CreateOwnMenu (oDom.documentElement.childNodes.Item(i).xml)
Next
strTitle = oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
AppendMenu hFirstMenu, MF_POPUP, hSecondMenu, strTitle
Exit Sub
Case "3"
End Select
For i = 0 To oDom.documentElement.childNodes.length - 1
CreateOwnMenu (oDom.documentElement.childNodes.Item(i).xml)
Next
End If
End Sub
Private Sub AddtoDynPop()
Dim oDom As New MSXML2.DOMDocument
Dim i As Integer
oDom.Load (App.Path + "\" + "Menu.xml")
If (oDom.parseError.errorCode <> 0) Then
MsgBox ("菜单文件格式错误,错误原因:" + oDom.parseError.reason)
Exit Sub
End If
Dim oNodeList As IXMLDOMNodeList
Dim oNode As IXMLDOMNode
Set oNodeList = oDom.documentElement.selectNodes("//MenuBar")
For i = 0 To oNodeList.length - 1
Set oNode = oNodeList.Item(i)
CreateOwnMenu (oNode.xml)
Next
End Sub
Private Sub menFile_Click(Index As Integer)
MsgBox "Hello"
End Sub'privatePrivate Sub menFile_EditPassword_Click(Index As Integer)End SubPrivate Sub menFile_Switch_Click(Index As Integer)End Sub
续:
VB->加一个EXE工程->加一个Form-->加一个菜单项(name:menFile,Index:0)
把下面的代码写入:
Option Explicit
Dim hSecondMenu As Long
Private Sub a_Click(Index As Integer)End SubPrivate Sub Form_Load()
AddtoDynPop
End SubPrivate Sub CreateOwnMenu(ByVal strNodeXML As String)
Dim i As Integer
Dim oDom As New MSXML2.DOMDocument
oDom.loadXML (strNodeXML)
Dim hFirstMenu As Long
Dim lThirdMenu As Long
Dim strTitle As String
Dim hMenu As Long
hMenu = GetMenu(Me.hwnd) If (oDom.documentElement.hasChildNodes = False) Then '无子菜单时,显示菜单
Select Case oDom.documentElement.Attributes.getNamedItem("Level").nodeValue
Case "1":
AddNewMenu hwnd, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue, True
Case "2"
InsertNewSubMenu Me.hwnd, oDom.documentElement.Attributes.getNamedItem("Parent").nodeValue, _
oDom.documentElement.Attributes.getNamedItem("No").nodeValue, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
Case "3"
strTitle = oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
AppendMenu hSecondMenu, MF_STRING, ByVal 0&, strTitle '增加第三级菜单
End Select
Else '有子菜单
Select Case oDom.documentElement.Attributes.getNamedItem("Level").nodeValue
Case "1":
AddNewMenu hwnd, oDom.documentElement.Attributes.getNamedItem("Title").nodeValue, True
Case "2"
hFirstMenu = GetSubMenu(hMenu, oDom.documentElement.Attributes.getNamedItem("Parent").nodeValue)
hSecondMenu = CreatePopupMenu() '创建有第三级菜单的菜单条
For i = 0 To oDom.documentElement.childNodes.length - 1
CreateOwnMenu (oDom.documentElement.childNodes.Item(i).xml)
Next
strTitle = oDom.documentElement.Attributes.getNamedItem("Title").nodeValue
AppendMenu hFirstMenu, MF_POPUP, hSecondMenu, strTitle
Exit Sub
Case "3"
End Select
For i = 0 To oDom.documentElement.childNodes.length - 1
CreateOwnMenu (oDom.documentElement.childNodes.Item(i).xml)
Next
End If
End Sub
Private Sub AddtoDynPop()
Dim oDom As New MSXML2.DOMDocument
Dim i As Integer
oDom.Load (App.Path + "\" + "Menu.xml")
If (oDom.parseError.errorCode <> 0) Then
MsgBox ("菜单文件格式错误,错误原因:" + oDom.parseError.reason)
Exit Sub
End If
Dim oNodeList As IXMLDOMNodeList
Dim oNode As IXMLDOMNode
Set oNodeList = oDom.documentElement.selectNodes("//MenuBar")
For i = 0 To oNodeList.length - 1
Set oNode = oNodeList.Item(i)
CreateOwnMenu (oNode.xml)
Next
End Sub
Private Sub menFile_Click(Index As Integer)
MsgBox "Hello"
End Sub'privatePrivate Sub menFile_EditPassword_Click(Index As Integer)End SubPrivate Sub menFile_Switch_Click(Index As Integer)End Sub
续:
解决方案 »
- SerialPort.ReadLine和SerialPort.Read和SerialPort.ReadByte 我该用那个
- 请教:如何在客户端用richtextbox控件浏览服务器端的rtf格式的文件?
- 如何在word中去掉指定位置的回车符?
- 扩展桌面的功能怎么实现?
- 急!!高手指教:VB6 如何缩小显示原本尺寸很大的jpeg图片
- 控件
- 请大家答一下下面的题,就当你正在面试
- 请问 Outlook.MailItem对象项目Mymail1 有哪个属性说明邮件正在发送呢??
- 如何调用1个API函数,及使用过程?
- 问个问题,请您帮忙!
- 关于写帮助文件的问题
- 我的软件中使用了activereport2.0,在软件发布的时候,需要带那几个文件?还要注意什么问题?
Modules 文件:
Option Explicit
'///////////////////////////////////////////
'// Rados砤w Frankowski 14.04.1999 //
'// [email protected] //
'// vb4all.canpol.pl/api/default.htm //
'///////////////////////////////////////////'Obs硊ga menu: dodawanie nowego, zamiana, kasowanie, bitmapy, t硂Public Declare Function GetMenu Lib "user32" _
(ByVal hwnd As Long) As Long
Public Declare Function SetMenu Lib "user32" _
(ByVal hwnd As Long, ByVal hMenu As Long) As Long
Public Declare Function GetSubMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function SetMenuItemBitmaps Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Public Declare Function GetMenuItemID Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags 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 Any) As Long
Public Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Public Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function CreateMenu Lib "user32" () As Long
Public Declare Function CreatePopupMenu Lib "user32" () As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As LongPublic Declare Function LoadImage Lib "user32" Alias "LoadImageA" _
(ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, _
ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long'SetMenuItemBitmaps
Public Const MF_BYCOMMAND = &H0&
Public Const MF_BYPOSITION = &H400&Public Const MF_BITMAP = &H4&
Public Const MF_STRING = &H0&
Public Const MF_ENABLED = &H0&
Public Const MF_POPUP = &H10&
Public Const MF_SEPARATOR = &H800&'LoadImage
Public Const LR_LOADMAP3DCOLORS = &H1000
Public Const LR_LOADFROMFILE = &H10
Public Const LR_LOADTRANSPARENT = &H20
Public Const IMAGE_BITMAP = 0Private Function LoadBmp(sFile As String) As Long
'wczytuje podany plik i zwraca uchwyt do bitmapy
Dim hBmp As Long
hBmp = LoadImage(0, sFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE Or _
LR_LOADMAP3DCOLORS Or LR_LOADTRANSPARENT)
LoadBmp = hBmp
End FunctionPublic Function SetMenuBmp(hForm As Long, bmpFile As String, _
Optional idMenu As Long = 0, Optional idSubMenu = 0) As Boolean
'hFomr - uchwyt do formy
'bmpFile - nazwa pliku gdzie jest bitmapa
'idMenu - o kt髍e menu g丑wne chodzi
'idSubMenu - o kt髍e podmenu chodzi
Dim hMenu As Long
Dim hSubMenu As Long
Dim hID As Long
Dim hBmp As Long
Dim hRet As Long
hBmp = LoadBmp(bmpFile)
hMenu = GetMenu(hForm)
hSubMenu = GetSubMenu(hMenu, idMenu)
'hID = GetMenuItemID(hSubMenu, idSubMenu)
'hRet = SetMenuItemBitmaps(hMenu, hID, MF_BYCOMMAND, hBmp, hBmp)
hRet = SetMenuItemBitmaps(hSubMenu, idSubMenu, MF_BYPOSITION, hBmp, hBmp)
SetMenuBmp = hRet
End FunctionPublic Function DeleteMenu(hForm As Long, Optional idMenu As Long = 0, _
Optional idSubMenu = 0) As Boolean
Dim hMenu As Long
Dim hSubMenu As Long
Dim hID As Long
Dim hRet As Long
hMenu = GetMenu(hForm)
hSubMenu = GetSubMenu(hMenu, idMenu)
' hID = GetMenuItemID(hSubMenu, idSubMenu)
' hRet = RemoveMenu(hMenu, hID, MF_BYCOMMAND)
hRet = RemoveMenu(hSubMenu, idSubMenu, MF_BYPOSITION)
DeleteMenu = hRet
End FunctionPublic Function AddNewMenu(hForm As Long, sMenuName As String, Optional PopUp As Boolean = False) As Boolean
Dim hMenu As Long
Dim hRet As Long
Dim hPopUpMenu As Long
hMenu = GetMenu(hForm)
If PopUp Then 'je渓i chcemy 縠by menu mia硂 podmenu
hPopUpMenu = CreatePopupMenu
hRet = AppendMenu(hMenu, MF_STRING Or MF_POPUP, hPopUpMenu, sMenuName)
Else
hRet = AppendMenu(hMenu, MF_STRING, 0, sMenuName)
End If
DrawMenuBar hForm 'od渨ie縠nie menu
AddNewMenu = hRet
End FunctionPublic Function InsertNewSubMenu(hForm As Long, idMenu As Long, lPos As Long, _
sMenuName As String, Optional PopUp As Boolean = False) As Long
Dim hMenu As Long
Dim hRet As Long
Dim hSubMenu As Long
Dim hPopUpMenu As Long
hMenu = GetMenu(hForm)
hSubMenu = GetSubMenu(hMenu, idMenu)
If sMenuName = "-" Then
hRet = InsertMenu(hSubMenu, lPos, MF_STRING Or MF_BYPOSITION Or MF_SEPARATOR, 0, sMenuName)
Else
If PopUp Then
hPopUpMenu = CreatePopupMenu
hRet = InsertMenu(hSubMenu, lPos, MF_STRING Or MF_BYPOSITION Or MF_POPUP, hPopUpMenu, sMenuName)
Else
hRet = InsertMenu(hSubMenu, lPos, MF_STRING Or MF_BYPOSITION, 0, sMenuName)
End If
End If
DrawMenuBar hForm 'od渨ie縠nie menu
InsertNewSubMenu = hRet
End FunctionPublic Function InsertNewMenu(hForm As Long, idMenu As Long, sMenuName As String) As Long
Dim hMenu As Long
Dim hRet As Long
hMenu = GetMenu(hForm)
hRet = InsertMenu(hMenu, idMenu, MF_BYPOSITION Or MF_STRING, 0, sMenuName)
DrawMenuBar hForm 'od渨ie縠nie menu
InsertNewMenu = hRet
End FunctionPublic Function DelMenu(hForm As Long) As Boolean
Dim hMenu As Long
Dim hRet As Long
hMenu = GetMenu(hForm)
hRet = DestroyMenu(hMenu)
DrawMenuBar hForm 'od渨ie縠nie menu
DelMenu = hRet
End FunctionPublic Function CreateNewMenu() As Boolean
Dim hRet As Long
hRet = CreateMenu
CreateNewMenu = hRet
End Function
续:
<Menu>
<MenuBar No="1" Title="系统维护" Level="1">
<FirstMenu Parent="1" No="0" Title="操作员维护" Level="2"></FirstMenu>
<FirstMenu Parent="1" No="1" Title="客户维护" Level="2"></FirstMenu>
<FirstMenu Parent="1" No="2" Title="仓库维护" Level="2"></FirstMenu>
<FirstMenu Parent="1" No="3" Title="货品资料维护" Level="2"></FirstMenu>
<FirstMenu Parent="1" No="4" Title="新增销售订单" Level="2"></FirstMenu>
</MenuBar>
<MenuBar No="2" Title="基本资料管理" Level="1"></MenuBar>
<MenuBar No="3" Title="销售管理" Level="1">
<FirstMenu Parent="3" No="0" Title="新增销售订单" Level="2"></FirstMenu>
<FirstMenu Parent="3" No="1" Title="修改/作废销售订单" Level="2"></FirstMenu>
<FirstMenu Parent="3" No="2" Title="新增发货单" Level="2"></FirstMenu>
<FirstMenu Parent="3" No="3" Title="作废发货单" Level="2"></FirstMenu>
<FirstMenu Parent="3" No="4" Title="报表" Level="2">
<SecondMenu Parent="3" Title="销售日报表" Level="3"/>
<SecondMenu Parent="3" Title="销售月报表" Level="3"/>
<SecondMenu Parent="3" Title="销售年报表" Level="3"/>
<SecondMenu Parent="3" Title="发货报表" Level="3"/>
<SecondMenu Parent="3" Title="销售订单报表" Level="3"/>
</FirstMenu>
</MenuBar>
<MenuBar No="4" Title="库存管理" Level="1">
<FirstMenu Parent="4" No="1" Title="新增入库单" Level="2"/>
<FirstMenu Parent="4" No="2" Title="作废入库单" Level="2"/>
<FirstMenu Parent="4" No="3" Title="-----------------" Level="2"/>
<FirstMenu Parent="4" No="4" Title="新增出库单" Level="2"/>
<FirstMenu Parent="4" No="5" Title="作废出库单" Level="2"/>
<FirstMenu Parent="4" No="6" Title="报表" Level="2">
<SecondMenu Parent="4" Title="库存报表" Level="3"/>
</FirstMenu>
</MenuBar> <MenuBar No="5" Title="采购管理" Level="1"></MenuBar>
</Menu>