新浪首页免费邮件用户注册网站地图
上移动梦网
赢手机大奖

新浪首页 > 科技时代 > 网上学园 > 高级编程 > 正文
用VB编程让文本滚动更平滑

http://www.sina.com.cn 2001/09/07 09:13 中国电脑教育报 姜卫东、华云

  目前有许多软件都采用了类似于“电视字幕”的滚动字幕的形式(如电子小说阅读器以及诸如Winamp的“关于”界面等)。在VB中通常用一个Timer控件来控制文本的滚动速度,但是它的缺点就是跳跃感太强,效果不好。本文将介绍在VB中通过API函数DrawText来实现文本的平滑滚动。

  函数说明

  该函数的用法如下:

  Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

  其作用是将文本描绘到指定的矩形中返回值Long:描绘文字的高度

  参数类型及说明

  hdc:欲在其中显示文字的一个设备场景的句柄;

  lpStr:欲描绘的文本字串;

  nCount:欲描绘的字符数量。如果要描绘整个字串(直到空终止符),则可将这个参数设为-1;

  lpRect:指定用于绘图的一个格式化矩形(采用逻辑坐标);

  wFormat:一个标志位数组,决定了以何种形式执行绘图。

  程序实现

  进入VB,在默认窗体FORM1上放一个Picture控件“Picmain”,一个命令按钮“Command1”,然后输入如下代码:

  Option Explicit

  Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

  Private Declare Function GetTickCount Lib "kernel32" () As Long

  Const DT_BOTTOM As Long = &&H8

  Const DT_CALCRECT As Long = &&H400

  Const DT_CENTER As Long = &&H1

  Const DT_WORDBREAK As Long = &&H10

  Private Type RECT

  Left As Long

  Top As Long

  Right As Long

  Bottom As Long

  End Type

  Const ScrollText As String = "滚动字幕示例" && vbCrLf && vbCrLf && vbCrLf && "作者:姜卫东" && vbCrLf && _ vbCrLf && "地址:黑龙江省农业经济学校" && vbCrLf && vbCrLf && "有问题请给我来信!!!" && vbCrLf && "E-MAIL:hyjs@yeah.net" && vbCrLf && vbCrLf && vbCrLf && "谢谢使用"

  Dim isend As Boolean

  Private Sub Command1_Click()

  If isend = False Then

  isend = True

  Else

  isend = False

  frmAbout.Refresh

  scrollme

  End If

  End Sub

  Private Sub Form_Activate()

  scrollme

  End Sub

  Private Sub Form_Load()

  picmain.ForeColor = vbGreen

  picmain.FontSize = 14

  End Sub

  Private Sub scrollme()

  Dim LastFrameTime As Long

  '设置时间间隔,即滚动速度

  Const IntervalTime As Long = 10

  Dim rt As Long

  Dim DrawingRect As RECT

  '设置所画矩形的左边位置。

  Dim tmpX As Long, tmpY As Long

  Dim RectHeight As Long

  '显示窗体

  frmAbout.Refresh

  '获得所画矩形的尺寸

  rt = DrawText(picmain.hdc, ScrollText, -1, DrawingRect, DT_CALCRECT)

  If rt = 0 Then

  MsgBox "出错", vbExclamation

  isend = True

  Else

  '设置矩形的位置

  DrawingRect.Top = picmain.ScaleHeight

  DrawingRect.Left = 0

  DrawingRect.Right = picmain.ScaleWidth

  '设置矩形的高度

  RectHeight = DrawingRect.Bottom

  DrawingRect.Bottom = DrawingRect.Bottom + picmain.ScaleHeight

  End If

  Do While Not isend

  If GetTickCount() - LastFrameTime > IntervalTime Then

  picmain.Cls

  DrawText picmain.hdc, ScrollText, -1, DrawingRect, DT_CENTER Or DT_WORDBREAK

  DrawingRect.Top = DrawingRect.Top - 1

  DrawingRect.Bottom = DrawingRect.Bottom - 1

  '控制文本的循环滚动

  If DrawingRect.Top < -(RectHeight) Then

  DrawingRect.Top = picmain.ScaleHeight

  DrawingRect.Bottom = RectHeight + picmain.ScaleHeight

  End If

  picmain.Refresh

  LastFrameTime = GetTickCount()

  End If

  DoEvents

  Loop

  Set frmAbout = Nothing

  End Sub

  Private Sub Form_Unload(Cancel As Integer)

  isend = True

  End Sub Sub

  以上程序在Windows+VB6.0中文企业版中运行通过。

  



发表评论】【初学者园地】【科技聊天】【关闭窗口

新 闻 查 询

 相关链接
【学园专题】Visual Basic编程技巧
加拿大VB程序员赚多少 (2001/09/04 13:20)
利用VB制作MP3播放列表 (2001/08/20 15:27)
用VB设计自己的E-mail系统 (2001/08/09 14:25)
利用VB实现对IE的调用与控制 (2000/10/27 16:48)
用VisualBasic编写进度栏时钟 (2001/08/27 13:51)
用Visual Basic自编小游戏 (2001/04/24 15:01)
评论:Visual Basic宣告死亡 (2001/04/04 09:49)
用Visual Basic编程建立自己的回收站 (2000/09/29 11:23)
用Visual Basic设计E-mail程序 (2000/05/26 11:44)
VisualBasic中用户界面的设计原则 (2000/05/25 10:41)


科技时代意见反馈留言板 电话:010-82612286 或 010-82628888-3361   欢迎批评指正

网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息

Copyright © 1996 - 2001 SINA.com, Stone Rich Sight. All Rights Reserved

版权所有 四通利方 新浪网