VB中你想创建一个简单的状态栏也用上那个几MB的OCX吗?有没有方法可以不用呢,下面就是以API来创建
一个状态栏,VB让初学朋友学得很方便,但对你对VB有所了解的时候,却发现VB原来就是鸡肋......
先创建一个窗体,在窗体里添加两个Button,然后写下以下代码:
'-----------------------------------------------
'
'CreateStatusBarDemo
'
'codebyloveboom[DFCG][FCG][US]
'email:loveboom#163.com
'
'
'-------------------------------------------------
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下测试通过
新闻热点
疑难解答