VB中你想創建一個簡單的狀態欄也用上那個幾MB的OCX嗎?有沒有方法可以不用呢,下面就是以API來創建
一個狀態欄,VB讓初學朋友學得很方便,但對你對VB有所了解的時候,卻發現VB原來就是雞肋......
先創建一個窗體,在窗體里添加兩個Button,然后寫下以下代碼:
'-----------------------------------------------
'
'CreateStatusBarDemo
'
'codebyloveboom[DFCG][FCG][US]
'email:loveboom#163.com
'
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下測試通過
新聞熱點
疑難解答