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,下述常数之一:
  OPAQUE
  用当前的背景色填充虚线画笔、阴影刷子以及字符的空隙
  TRANSPARENT
  透明处理,即不作上述填充

设置当前文本颜色。这种颜色也称为“前景色”。

SetTextColor声明:

Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
返回值:
Long,文本色的前一个RGB颜色设定
参数:

hdc ------------  Long,设备场景的句柄

crColor --------  Long,新的文本色
  在VB里使用
  如改变了这个设置,注意恢复VB窗体或控件原始的文本颜色

设定文本颜色为红色:
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
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
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
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 Const DT_NOCLIP = &H100
Private Const DT_WORDBREAK = &H10
Private Const DT_EDITCONTROL = &H2000
Private Const OPAQUE = 2

Private Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = 3
End Sub

Private Sub Form_Click()
Dim Text As String, TxtRect As Rect
Text = "vb中,我想只用一个print在窗体上输出一串字符,但由于字行符较多且是连续的,我不想用多个print词句换行,请问有没有什么方法能,字符串自动换行"
Me.Cls
Call SetBkMode(Me.hdc, OPAQUE) '
Call SetBkColor(Me.hdc, RGB(200, 200, 200))
Call SetTextColor(Me.hdc, RGB(255, 0, 0))
Call SetRect(TxtRect, 20, 20, Me.ScaleWidth - 20, Me.ScaleHeight - 20)
Call DrawText(Me.hdc, Text, -1, TxtRect, DT_WORDBREAK Or DT_NOCLIP Or DT_EDITCONTROL)
End Sub

VB中利用DrawText输出字符串且自动换行相关推荐

  1. php 字符串进行计算_怎么在php中利用eval对字符串格式进行计算

    怎么在php中利用eval对字符串格式进行计算 发布时间:2020-12-16 16:42:57 来源:亿速云 阅读:101 作者:Leah 本篇文章给大家分享的是有关怎么在php中利用eval对字符 ...

  2. php表格增加一行数据,““vb中数据库内容输出到excel如何把表格第一行合并添加一个大标题...

    excel表格上面和下面都有行怎么在中间添加一行 excel表面和下面都有行怎么在中间添加一行的方法如下: 1.打开要处理的文档, 2.标定位到要插入的位置之后,比如要在2,3行之间插入,就定位到第3 ...

  3. java 中利用subString 截取字符串中第三个/后面的内容,并将/用代替

    原文地址为: java 中利用subString 截取字符串中第三个"/"后面的内容,并将/用>代替 private String extractString(String ...

  4. VB.net小技巧——VB中利用TreeView控件和Box控件做知识备忘

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 VB.net小技巧--VB中利用TreeView控件和Box控件做知识备忘 这里不涉及代码的展示,主要是为了阐述一种做笔记的思想. 为 ...

  5. 写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串

    写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串 #include<stdio.h> #include<string.h> int main() {void ...

  6. C#中利用正则表达式实现字符串搜索

    原文转载自:http://www.yesky.com/top/389/2036889.shtml 摘要:本文给出了在C#下利用正则表达式实现字符串搜索功能的方法,通过对.NET框架下的正则表达式的研究 ...

  7. VB中利用CopyMemory使用指针

    一.指针是什么? 不需要去找什么标准的定义,它就是一个32位整数,在C语言和在VB里都可以用Long类型来表示.在32位Windows平台下它和普通的32位长整型数没有什么不同,只不过它的值是一个内存 ...

  8. 在sql server中用正则表达式替换html标签,SQL Server中利用正则表达式替换字符串

    建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION ...

  9. JAVA输出字符串中字母_Java输出字符串中的大写英文字母数,小写英文字母数以及非英文字母的三种方法...

    import java.util.*; /** * 3.编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母. 提示: 方法一:使用循环提取字符,判断字符是否在A-Z .a-z ...

  10. VB中利用FSO对象对文件夹操作

    windows还给我们提供了一个叫做FileSystemObject(简称FSO)对象.FSO对象模型中包括了计算机文件系统所有的对象.见下.利用这些对象可以更方便的操作文件系统. 对象   功能 D ...

最新文章

  1. 第二阶段个人博客总结8
  2. 理解Java字符串常量池与intern()方法
  3. 阿里云mysql 日志_mysql日志-阿里云开发者社区
  4. 大学生影视主题网页制作 银翼杀手2049电影网页设计模板 学生静态网页作业成品 dreamweaver电影HTML网站制作
  5. java 中linux命令参数说明,java中linux命令参数说明
  6. TensorFlow新功能「AutoGraph」:将Python转换为计算图
  7. 百家号在线视频编辑器的技术演进
  8. 什么是物联网(IoT)?
  9. Neo4j【有与无】【N6】Graph数据库内部
  10. 如何下载微信公众号音频,不需要插件,不安装软件
  11. ai跟随路径_AI 路径寻找器(形状组合工具)-怎么使用,使用教程
  12. 1156 十个成绩排序
  13. AI时代,APP运营是否会被淘汰
  14. Java Web之过滤器的简单创建
  15. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)
  16. 8年老码农现身说法:大龄程序员找工作,为什么这么难?
  17. 读《做人的最高境界是厚道》有感
  18. 123456123456#5#----com.zzj.DinosourKnown235---前拼show后广--恐龙百科-333333
  19. js打开飞行模式_什么是飞行模式? 它有什么作用?什么时候应该打开它?
  20. (SQL入门经典+SQL必知必会+视频)笔记之一

热门文章

  1. 微信小程序开发之——WebView
  2. Hadoop面试题总结(大数据面试)
  3. Navicat数据备份、linux mysql定时备份定时删除、docker内部mysql定时备份定时删除
  4. 数据结构 实验4——拓扑排序
  5. MP6002使用说明
  6. openGauss助力中国移动获 “ICT优秀案例”
  7. ARM64体系结构编程与实践:基础知识
  8. MySQL卸载不干净问题,connector net卸不掉
  9. 天气/气象相关公开数据集
  10. java实现记住密码_java简单实现记住密码功能