首页 > 学院 > 开发设计 > 正文

使用API在VB中创建状态栏

2019-11-18 17:54:19
字体:
来源:转载
供稿:网友

VB中你想创建一个简单的状态栏也用上那个几MB的OCX吗?有没有方法可以不用呢,下面就是以API来创建
一个状态栏,VB让初学朋友学得很方便,但对你对VB有所了解的时候,却发现VB原来就是鸡肋......

先创建一个窗体,在窗体里添加两个Button,然后写下以下代码:

'-----------------------------------------------
'
'CreateStatusBarDemo
'
'codebyloveboom[DFCG][FCG][US]
'email:loveboom#163.com
'http://blog.csdn.net/bmd2chen
'
'-------------------------------------------------
DimhWndBarAsLong;状态栏句柄
PRivateConstIDC_STATBARAsLong=&H2005'状态栏ID

PrivateSubCommand1_Click()
DimretAsBoolean

ret=CreateStatBar(Me.hwnd,IDC_STATBAR,hWndBar)
Ifret=TrueThen
MsgBox"创建状态栏成功!"
Else
MsgBox"创建状态栏失败:-(!",48
EndIf

EndSub


PrivateSubCommand2_Click()
SetBarTexthWndBar,1,"CreateStatusBarDemo:-)!"
EndSub

'移动状态栏
PrivateSubForm_Resize()
MoveStatWindowhWndBar
EndSub

然后添加一个模块,模块里写上代码:

PrivateConstWS_CHILDAsLong=&H40000000'WS_CHILD和WS_VISIBLE是必需函数
PrivateConstWS_VISIBLEAsLong=&H10000000
PrivateConstWM_USERAsLong=&H400
PrivateConstSB_SETPARTSAsLong=(WM_USER 4)'这两个常数在VB自带的api查询器里没有,需要手工添加
PrivateConstSB_SETTEXTAAsLong=(WM_USER 1)
PrivateDeclareFunctionCreateStatusWindowLib"comctl32.dll"(ByValstyleAsLong,ByVallpszTextAsString,ByValhwndParentAsLong,ByValwIDAsLong)AsLong
PrivateDeclareFunctionSendMessageLib"user32.dll"Alias"SendMessageA"(ByValhwndAsLong,ByValwMsgAsLong,ByValwParamAsLong,ByReflParamAsAny)AsLong
PrivateDeclareFunctionMoveWindowLib"user32.dll"(ByValhwndAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValbRepaintAsLong)AsLong

'--------------------------------------------------
'
'创建状态栏
'函数说明:
'ParenthWnd  状态栏所属的句柄
'IDC_STATBAR状态栏的ID号,用于对状态栏的单击之类的操作
'hBarWin函数返回状态栏的句柄
'szText要显示的信息
'
'---------------------------------------------------
FunctionCreateStatBar(ParenthWndAsLong,IDC_STATBARAsLong,hBarWinAsLong,OptionalszTextAsString="Demo")AsBoolean
DimretAsLong'返回值
Dimbar(0To1)AsLong'分栏的各项位置
DimszbarAsLong'分栏的数目

'-------------------------------------------------------
'定义数组
bar(0)=235'第一栏宽度为245
bar(1)=-1'-1表示后面的分为一栏

'-------------------------------------------------------

ret=CreateStatusWindow(WS_CHILDOrWS_VISIBLE,ByValszText,ParenthWnd,IDC_STATBAR)'创建状态栏
szbar=2
Ifret=0Then'如果创建失败则退出过程
CreateStatBar=False
ExitFunction
EndIf
hBarWin=ret'返回状态栏的句柄
Ifszbar>1Then'因为默认就是分一栏所以,这里判断为大于1就是分栏
SendMessagehBarWin,SB_SETPARTS,szbar,bar(0)'分栏
EndIf
CreateStatBar=True'创建成功返回真值
EndFunction

'----------------------------
'移动状态栏
'----------------------------
SubMoveStatWindow(hBarAsLong)
IfhBarThen'如果状态栏句柄不为0则移动
CallMoveWindow(hBar,0,0,0,0,True)
EndIf
EndSub

'------------------------------
'在指定栏上显示信息
'hBar为状态栏的句柄
'szbar指定要在哪一栏显示信息,从0开始计,也就是说,如果分两栏,我们要在第二栏里显示信息,szbar就设置为1
'szText要显示的信息
'-------------------------------
SubSetBarText(hBarAsLong,szbarAsLong,strTextAsString)
SendMessagehBar,SB_SETTEXTA,szbar,ByValstrText
EndSub

这样状态栏就基本可行了,当然,你还可以用SetWindowLong来处理状态栏信息.
程序在Win2003vb6sp6下测试通过

->


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表