网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.VB与大型数据库无数据源的连接.
.用VB建立Access数据库结构.
.用VB学做“黑客”程序.
.巧用VB编程使XMPLAYER自动播放VCD.
.文件与VB程序关联后——双击和打.
.用VB5直接控制Excel97.
.VB5.0中远程数据库的访问.
.使用ADO來压缩或修复MicrosoftAc.
.VisualBasicCOM基础讲座之类的建.
.VisualBasic移除Form右上方之『X.
.捕捉MouseExit事件.
.用VB设计条形码轻印刷系统.
.移动文件到回收站.
.在TextBox中限制只能输入数字.
.在VB中调用API函数动态改变及恢复.
.VB邮件检查程序(一).
.VBCOM基础讲座之测试ActiveXEXEs.
.用FreeFile防止文件打开冲突.
.用VB测定可移动驱动器是否准备好.
.理解面向对象编程.

VB中实现菜单分割

发表日期:2006-2-27


当一个菜单下子菜单项较多时,一打开菜单就出现了长长的菜单项,如果其他的菜单项下子菜单较少,就显得很不协调。现在的一些软件还允许用户在已有的菜单中添加菜单项,这都会造成子菜单项过多的情况,如果能像某些软件那样将较多的子菜单项分成两列显示就显得美观多了。在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,(mnuItemCount\2)+pad,True,mInfo)

′按新格式显示菜单

mInfo.fType=RGB—STARTNEWCOLUMNWITHVERTBAR

mInfo.fMask=MIIM—TYPE

rv=SetMenuItemInfo(hSubMenu,(mnuItemCount\2)+pad,True,mInfo)

IfrvThenMsgBox″分割完毕″

EndSub

运行后按命令按钮,将发现子菜单项分成了两部分,左边五项,右边四项。

程序运行环境:中文WIN95,VB5.0。->

上一篇:在VB中异步执行程序 人气:4030
下一篇:调用API函数设计ABOUT窗口 人气:3108
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐