VB中實現(xiàn)菜單分割
導(dǎo)讀:當(dāng)一個菜單下子菜單項較多時,一打開菜單就出現(xiàn)了長長的菜單項,如果其他的菜單項下子菜單較少,就顯得很不協(xié)調(diào),F(xiàn)在的一些軟件還允許用戶在已有的菜單中添加菜單項,這都會造成子菜單項過多的情況,如果能像某些軟件那樣將較多的子菜單項分成兩列顯示就顯得美觀多了。
在VB中要實現(xiàn)這一功能還是比較方便的,下面舉例說明。
實現(xiàn)菜單分割這一功能需要使用API函數(shù),思路是:首先獲得菜單句柄,從而可得到其子菜單項數(shù),然后將子菜單項數(shù)除以2,若子菜單項數(shù)為奇數(shù),則將多余的一項劃到第一部分,然后利用API函數(shù)SetMenuItemInfo重新設(shè)定菜單顯示形式即可。
下面是一個例子。首先用菜單生成器制做一個包括9個子菜單項的菜單,然后,在總體聲明部分聲明用到的API函數(shù)和常數(shù),這些可以從API說明文件中復(fù)制。
Option Explicit
′菜單信息結(jié)構(gòu)說明
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End Type
'所需的API函數(shù)和常數(shù)
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) _
As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Private Declare Function GetMenuItemInfo Lib "user32" Alias _
"GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _
ByVal b As Boolean, lpmii As MENUITEMINFO) As Long
Private Declare Function SetMenuItemInfo Lib "user32" Alias _
"SetMenuItemInfoA" (ByVal hMenu As Long, ByVal uItem As Long, _
ByVal fByPosition As Long, lpmii As MENUITEMINFO) As Long
Const MIIM_TYPE = &H10
Const RGB_STARTNEWCOLUMNWITHVERTBAR = &H20&
Const MFT_STRING = &H0&
相關(guān)推薦:2011計算機(jī)等級考試二級VB考點及習(xí)題匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |