日期:2012-12-01  浏览次数:20470 次

  
VB中你想创建一个简单的状态栏也用上那个几MB的OCX吗?有没有方法可以不用呢,下面就是以API来创建
一个状态栏,VB让初学朋友学得很方便,但对你对VB有所了解的时候,却发现VB原来就是鸡肋......
先创建一个窗体,在窗体里添加两个Button,然后写下以下代码:
’-----------------------------------------------

’               Create Status Bar Demo

’  code by loveboom[DFCG][FCG][US]
’  email:loveboom#163.com
’  http://blog.csdn.net/bmd2chen

’-------------------------------------------------
Dim hWndBar As Long               ;状态栏句柄
Private Const IDC_STATBAR As Long = &H2005        ’状态栏ID 
Private Sub Command1_Click()
Dim ret As Boolean
ret = CreateStatBar(Me.hwnd, IDC_STATBAR, hWndBar)
If ret = True Then
    MsgBox "创建状态栏成功!"
Else
    MsgBox "创建状态栏失败:-(!", 48
End If
End Sub

Private Sub Command2_Click()
    SetBarText hWndBar, 1, "Create StatusBar Demo:-)!"
End Sub
’移动状态栏
Private Sub Form_Resize()
MoveStatWindow hWndBar
End Sub

然后添加一个模块,模块里写上代码:
Private Const WS_CHILD As Long = &H40000000             ’WS_CHILD 和WS_VISIBLE是必需函数
Private Const WS_VISIBLE As Long = &H10000000
Private Const WM_USER As Long = &H400
Private Const SB_SETPARTS As Long = (WM_USER + 4)       ’这两个常数在VB自带的api查询器里没有,需要手工添加
Private Const SB_SETTEXTA As Long = (WM_USER + 1)
Private Declare Function CreateStatusWindow Lib "comctl32.dll" (ByVal style As Long, ByVal lpszText As String, ByVal hwndParent As Long, ByVal wID As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function MoveWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
’--------------------------------------------------

’                       创建状态栏
’函数说明:
’ParenthWnd  状态栏所属的句柄
’IDC_STATBAR   状态栏的ID号,用于对状态栏的单击之类的操作
’hBarWin       函数返回状态栏的句柄
’szText        要显示的信息

’---------------------------------------------------
Function CreateStatBar(ParenthWnd As Long, IDC_STATBAR As Long, hBarWin As Long, Optional szText As String = "Demo") As Boolean
    Dim ret As Long