使用API在VB中创建状态栏

创建

  
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                 返回值
    Dim bar(0 To 1) As Long         分栏的各项位置
    Dim szbar As Long               分栏的数目
    
-------------------------------------------------------
定义数组
    bar(0) = 235                    第一栏宽度为245
    bar(1) = -1                     -1表示后面的分为一栏
    
-------------------------------------------------------
    ret = CreateStatusWindow(WS_CHILD Or WS_VISIBLE, ByVal szText, ParenthWnd, IDC_STATBAR)     创建状态栏
    szbar = 2
    If ret = 0 Then                 如果创建失败则退出过程
        CreateStatBar = False
        Exit Function
    End If
    hBarWin = ret                   返回状态栏的句柄
    If szbar > 1 Then               因为默认就是分一栏所以这里判断为大于1就是分栏
        SendMessage hBarWin, SB_SETPARTS, szbar, bar(0)    分栏
    End If
    CreateStatBar = True            创建成功返回真值
End Function
----------------------------
移动状态栏
----------------------------
Sub MoveStatWindow(hBar As Long)
If hBar Then                如果状态栏句柄不为0则移动
    Call MoveWindow(hBar, 0, 0, 0, 0, True)
End If
End Sub
------------------------------
在指定栏上显示信息
hBar 为状态栏的句柄
szbar 指定要在哪一栏显示信息从0开始计也就是说如果分两栏我们要在第二栏里显示信息szbar就设置为1
szText 要显示的信息
-------------------------------
Sub SetBarText(hBar As Long, szbar As Long, strText As String)
    SendMessage hBar, SB_SETTEXTA, szbar, ByVal strText
End Sub

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

时间: 2024-11-05 14:46:14

使用API在VB中创建状态栏的相关文章

VB外接程序的制做-在VB中创建您自己工具条和菜单

菜单|程序|创建|工具条 VB外接程序的制做二,在VB中创建您自己工具条和菜单 创建工具条依然需要使用到VBI,只要和VB打交道,必须有它,同时在上篇文章所阐述的菜单项的制做方法是对你现在即将做的工作有用的.有一点你必须知道,无论是创建按钮,还是创建菜单项,他们之间是没有区别的.只是有一些地方有一点点不同而已. 怎样创建工具条呢?非常简单. VBI.CommandBars.Add cbsToolsBarName 此方法后面当然有其它可选参数,但是有些东西对于现在我要阐述的问题是无关的. Func

vb 中 创建的EXCEL

excel|创建 我用的是DAO 将data中的数据导入到自己创建的Excel 对象中去 Sub TableToExcel(nTableName As Integer, nTableData() As Integer) FrmQuarterTable.MousePointer = 11 On Error Resume Next Dim i As Integer Dim j As Integer Dim strYear As String Dim strSeason As String Dim x

ASP进阶:VB中的模块,类,ActiveX与API的使用

active|activex 这几天搞了点c/s结构的程序设计, 由于ASP用得比较熟练,所以VB6.0自然成为我首选的开发工具. 在学习过程中,我结合自己的经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来的好处. 一.模块 (Module) 在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用.这是初步的提高代码可复用性的途径.我想有经验的ASP(VBSCRIPT,以后都只用VBScript来写Asp程序)程序员都用过<!--#Include file="&q

在VB中动态创建数据库

在VB中动态创建数据库新建工程.添加控件 对应写上代码 以下为引用的内容:Private Sub Command2_Click()    Dim myDB As DAO.Database    'Set myDB = DAO.OpenDatabase("d:\mydb3.mdb")    Set myDB = DAO.OpenDatabase(App.Path + "/mydb.mdb")    Dim d As String    d = "delete

在VB.Net中创建使用控件数组

创建|控件|数组   在VB.Net中创建使用控件数组 首先创建一个Button类型控件数组: 1.创建"Windows应用程序"类型的工程,添加名为ButtonArray的类,并使该类继承 System.Collection.CollectionBase 类.System.Collections.CollectionBase类是.NET框架类库中为集合操作提供抽象的基类,通过对它的继承可以为我们的ButtonArray类具备集合增加.删除.索引的功能. 2.为ButtonArray类

VB中利用MapX创建用户定制工具

摘要 本文介绍了VB中如何利用MapX创建用户定制地图工具,详细地说明了整个创建过程,以及在创建定制工具的过程中所使用的关键方法. 1.前言 随着地理信息系统的发展,国内外已出现了不少GIS(地理信息系统)软件,其中MapX是MapInfo公司的ActiveX控件产品.由于它是一种基于Windows操作系统的标准控件,因而MapX4.0支持绝大多数标准的可视化开发环境,如:VisualBasic,Delphi,PowerBuilder,VisualC++等面向对象语言,而且可以使用Lotus s

用vb语言创建的,可是留言之后,数据库中没有数据,留言列表没显示留言内容,是哪里错误啊???

问题描述 用vb语言创建的,可是留言之后,数据库中没有数据,留言列表没显示留言内容,是哪里错误啊???留言页面的代码:ImportsSystem.DataImportsSystem.Data.SqlClientImportsSystem.ConfigurationPartialClassDefault2InheritsSystem.Web.UI.PageProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)H

ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启动,及添加控件到应用中. 如何配置 ASP.NET 5.0 管道. 在 IIS 外对立部署应用. 本文的目的是从空的项目开始,逐步讲解如何创建应用.当然,您也可以从"Starter Web" 模板开始,它默认包含了MVC 6.权限.记录等其他模块,同时也内置了有效的控制器和视图在其中. 创

VB.Net创建不规则窗体 Montaque(原作)

 VB.Net创建不规则窗体    Montaque(原作)   一般说来,应用程序的窗体都是规则的,即是矩形窗体.有时候为了某种特殊的用途,我们希望改变应用程序窗体的形状,比如做个个性十足的mp3播放器,小时钟等等,这就需要 "定制"我们的应用程序.另外,特殊形状的窗体有时候也能吸引用户的注意力,使得他们格外注意你的程序. 在VB6里面,我们一般通过以下代码来创建不规则窗体.Private Declare Function SetWindowRgn Lib "user32&