VB中有个Print函数可以对字符串输出到窗体、图像框、立即窗口、打印机等对象上,但它也有一定的局限性,比如长文本时需要自动换行是很麻烦的,但是利用API就很容易做到,接下来我们就利用DrawText来实现长文本自动换行,且加上文本背景和文本颜色的方法,如图:
首先我们先设定一个限定文本输出的RECT范围架构,而这个RECT架构我们可以用一个API函数"SetRect"来设置:
RECT结构 |
Private Type Rect Left As Long Top As Long Right As Long Bottom As Long End Type |
SetRect声明 |
Private Declare Function SetRect Lib "user32" (lpRect As Rect, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long |
返回值 |
Long,非零表示成功,零表示失败 |
参数 |
lpRect --------- RECT,欲设置的矩形 X1 ------------- Long,左侧区域(Left)的值 Y1 ------------- Long,顶部区域(Top)的值 X2 ------------- Long,右侧区域(Right)的值 Y2 ------------- Long,底部区域(Bottom)的值 |
设定输出文本在指定的矩形范围内 |
Dim TxtRect as Rect '定义一个RECT变量 Call SetRect(TxtRect, 20, 20, Me.ScaleWidth - 20, Me.ScaleHeight) |
- 设定了输出文本的范围,要想改变文本的背景颜色和前景颜色,需要用到两个API函数:"SetBkColor"和"SetTextColor":
为指定的设备场景设置文本背景颜色。 SetBkColor声明: |
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long |
返回值: |
Long,前一个背景色,CLR_INVALID表示出错 |
参数: |
hdc ------------ Long,设备场景的句柄 crColor -------- Long,新背景颜色的RGB颜色值 |
设定文本背景颜色为浅灰色: |
Call SetBkColor(Me.hdc, RGB(200, 200,200)) |
要实现文本背景颜色还需要一个API函数:SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式。 |
SetBkMode声明: |
Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long |
返回值: |
Long,前一个背景模式的值 |
参数: |
hdc ------------ Long,设备场景的句柄 nBkMode -------- Long,下述常数之一: |
设置当前文本颜色。这种颜色也称为“前景色”。 SetTextColor声明: |
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long |
返回值: |
Long,文本色的前一个RGB颜色设定 |
参数: |
hdc ------------ Long,设备场景的句柄 crColor -------- Long,新的文本色 |
设定文本颜色为红色: |
Call SetTextColor(Me.hdc, RGB(255, 0, 0)) |
DrawText声明: |
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 |
返回值: |
Long,描绘文字的高度 |
参数: |
hdc ------------ Long,欲在其中显示文字的一个设备场景的句柄 lpStr ---------- String,欲描绘的文本字串 nCount --------- Long,欲描绘的字符数量。如果要描绘整个字串(直到空中止符),则可将这个参数设为-1 lpRect --------- RECT,指定用于绘图的一个格式化矩形(采用逻辑坐标) wFormat -------- Long,一个标志位数组,决定了以何种形式执行绘图。参考下面总结的常数类型列表 |
定义文本左对齐和自动换行常数: |
Private Const DT_NOCLIP = &H100 Private Const DT_WORDBREAK = &H10 Private Const DT_EDITCONTROL = &H2000 |
输出文本到窗体: |
Dim text As String'定义一个存储文本的变量 text="vb中,我想只用一个print在窗体上输出一串字符,但由于字行符较多且是连续的,我不想用多个print词句换行,请问有没有什么方法能,字符串自动换行" Call DrawText(Me.hdc, text, -1, Rect, DT_WORDBREAK Or DT_NOCLIP Or DT_EDITCONTROL) |
实例: |
Option Explicit Private Type Rect Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long Private Const DT_NOCLIP = &H100 Private Sub Form_Load() Private Sub Form_Click() |
发