程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB中實現菜單分割

VB中實現菜單分割

編輯:VB綜合教程
當一個菜單下子菜單項較多時,一打開菜單就出現了長長的菜單項,如果其他的菜單項下子菜單較少,就顯得很不協調。現在的一些軟件還允許用戶在已有的菜單中添加菜單項,這都會造成子菜單項過多的情況,如果能像某些軟件那樣將較多的子菜單項分成兩列顯示就顯得美觀多了。在VB中要實現這一功能還是比較方便的,下面舉例說明。
  
  實現菜單分割這一功能需要使用API函數,思路是:首先獲得菜單句柄,從而可得到其子菜單項數,然後將子菜單項數除以2,若子菜單項數為奇數,則將多余的一項劃到第一部分,然後利用API函數SetMenuItemInfo重新設定菜單顯示形式即可。
  
  下面是一個例子。首先用菜單生成器制做一個包括9個子菜單項的菜單,然後,在總體聲明部分聲明用到的API函數和常數,這些可以從API說明文件中復制。
  
  OptionExplicit
  
  ′菜單信息結構說明
  
  PrivateTypeMENUITEMINFO
  
  cbSizeAsLong
  
  fMaskAsLong
  
  fTypeAsLong
  
  fStateAsLong
  
  wIDAsLong
  
  hSubMenuAsLong
  
  hbmpCheckedAsLong
  
  hbmpUncheckedAsLong
  
  dwItemDataAsLong
  
  dwTypeDataAsString
  
  cchAsLong
  
  EndType
  
  ′所需的API函數和常數
  
  PrivateDeclareFunctionGetMenuLib″user32″-
  
  (ByValhwndAsLong)AsLong
  
  PrivateDeclareFunctionGetMenuItemCountLib″user32″-
  
  (ByValhMenuAsLong)AsLong
  
  PrivateDeclareFunctionGetSubMenuLib″user32″-
  
  (ByValhMenuAsLong,ByValnPosAsLong)AsLong
  
  PrivateDeclareFunctionGetMenuItemInfoLib″user32″-
  
  Alias″GetMenuItemInfoA″(ByValhMenuAsLong,ByValunAsLong,-
  
  ByValbAsBoolean,lpmiiAsMENUITEMINFO)AsLong
  
  PrivateDeclareFunctionSetMenuItemInfoLib″user32″-
  
  Alias″SetMenuItemInfoA″(ByValhMenuAsLong,ByValuItemAsLong,-
  
  ByValfByPositionAsLong,lpmiiAsMENUITEMINFO)AsLong
  
  ConstMIIM—TYPE=&H10
  
  ConstRGB—STARTNEWCOLUMNWITHVERTBAR=&H20&
  
  ConstMFT—STRING=&H0&
  
  在窗體中添加一個命令按鈕,Caption=“分割菜單”,雙擊寫如下代碼:
  
  PrivateSubCommand1—Click()
  
  DimrvAsLong
  
  DimhSubMenuAsLong
  
  DimmnuItemCountAsLong
  
  DimmInfoAsMENUITEMINFO
  
  DimpadAsLong
  
  ′獲取菜單項句柄和子菜單項數
  
  hSubMenu=GetSubMenu(GetMenu(Me.hwnd),0)
  
  mnuItemCount=GetMenuItemCount(hSubMenu)
  
  ′將子菜單項分成兩部分
  
  IfmnuItemCountMod2<>0Thenpad=1
  
  ′取得當前菜單信息
  
  mInfo.cbSize=Len(mInfo)
  
  mInfo.fMask=MIIM—TYPE
  
  mInfo.fType=MFT—STRING
  
  mInfo.dwTypeData=Space$(256)
  
  mInfo.cch=Len(mInfo.dwTypeData)
  
  rv=GetMenuItemInfo(hSubMenu,(mnuItemCount2)+pad,True,mInfo)
  
  ′按新格式顯示菜單
  
  mInfo.fType=RGB—STARTNEWCOLUMNWITHVERTBAR
  
  mInfo.fMask=MIIM—TYPE
  
  rv=SetMenuItemInfo(hSubMenu,(mnuItemCount2)+pad,True,mInfo)
  
  IfrvThenMsgBox″分割完畢″
  
  EndSub
  
  運行後按命令按鈕,將發現子菜單項分成了兩部分,左邊五項,右邊四項。
  
  程序運行環境:中文WIN95,VB5.0。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved