|
阔别多日,这次再让我们回到VB API的神奇世界中。鉴于上次文章作品给网友们的反响很大,并强烈要求继续写下去,所以这些天特意抽了一点点时间。不过最近因为身体很不适,所以坐在电脑前的时间也比以前少了,以致拖到现在才把文章发布出来。呵呵,好了,废话不多说了,转入正题。
这次咱们来深入了解API在VB程序中的运用,并且有些复杂的API使用可能会使你感到很悲观,不过我会尽量用最容易让人理解的方式表达出来。注:如果你是一个刚入门API的初学者,那么请你先看看关于我写的初级API入门教程,也许会对了解API有帮助,地址:http://www.vbgood.com/viewthread.php?tid=50241&extra=page%3D1
一、API的类型结构。
API的类型结构与VB中差不多,一般声明时使用Type定义类型。如果你不懂的话麻烦你先打开你的VB入门教程书看看。好了,文字理论咋不多说,用实例证实理论(偶喜欢这句话)。
1,在Form窗体上用API画文字,最初了解类型结构填充
;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_CENTER = &H1
;Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Sub Form_Load()
Dim lpRect As RECT
Me.AutoRedraw = True
Me.ScaleMode = 3
'填充结构
With lpRect
.Left = 0
.Top = 0
.Right = Me.ScaleWidth
.Bottom = Me.ScaleHeight
End With
DrawText Me.hdc, "这是文字效果", -1, lpRect, DT_CENTER
End Sub
好了,咱们开始分析,首先看Form_Load里面的代码。
Dim lpRect As RECT。这一句是声明一个RECT自定义类型,这个类型可在VB浏览器的类型中找到。
Me.AutoRedraw = True。这一句其实就是设置当前窗体的AutoRedraw属性,设为True,表示持久输出图像。不懂查帮助。
Me.ScaleMode = 3。设置当前窗体的像素模式。至于为啥要设置为3,下面将会讲到。
With lpRect...End With。从With 到 End With为填充咱们声明的lpRect类型结构。具体看里面的。
.Left=0。这里相当于x坐标的初始值。
.Top=0。这里相当于y坐标的初始值。
.Right = Me.ScaleWidth。Right表示从Left开始的宽度。这里赋值为Me.ScaleWidth表示当前窗体像素的宽度。
.Bottom = Me.ScaleHeight。同上。Bottom表示从Top开始的高度。Me.ScaleHeight表示当前窗体像素的高度。
关键的就是下面一句,是它帮助我们在窗体中画出文字的。这里说一下为什么需要把当前窗体的坐标度量单位(ScaleMode)改成3(Pixel像素),因为Windows不管画什么都是以像素为单位,所以我们为了确定咱们所画的文本显示在正常位置,就必须使用像素为单位!明白了么??(问:还是不明白?答:默默无语两眼泪啊~~)
DrawText Me.hdc, "这是文字效果", -1, lpRect, DT_CENTER
现在分析这条API。看看里面需要传入的参数:ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long
ByVal hdc As Long。hdc为Long整形,所以应该传入数值,不过给大家一个技巧,以后凡是看到hdc这个变量字符,表示需要传入的为一个hdc句柄,注意可不是hwnd句柄哦!这个句柄窗体和Picture控件都有,大家注意看就是了。
ByVal lpStr As String。传入字符串。这里就是咱们需要画到窗体上的文本。
ByVal nCount As Long。传入数值。看看里面的声明字符nCount,可以看出来这与数目有关,与什么数目呢?当然是文本罗。也就是说要显示的字符个数,一般如果需要全部显示出来可设为-1即可,表示显示所有字符。
lpRect As RECT。一个Rect类型,这里需要使用Rect类型,上面我们已经在API浏览器找到了这个类型并声明了,所以只需要传入相应的类型声明就可以了。不过这次与我上一次讲的有所不同,上次是通过API类型结构获取相关的信息,而这次需要你把API类型结构填充好以后再传入进去。希望大家在这里注意下。可能有人要问了,那为什么这次就要这么做?我的回答是:因为API并不是万能的和灵活的,有的时候需要我们人为的设置一些参数来完成自己所需要这个API的功能,大家可以通过上面的结构填充就可知道,我们所要画文本的整个范围就是整个Form窗体的范围啊!
ByVal wFormat As Long。传入数值,不过可以看看nFormat声明字符,可以想像这里可能需要传入这个API的使用格式,就如我们前面所讲的那样。现在打开API浏览器,在常数中找找,输入这个API的开头,Draw(D)Text(T)=DT_,可以看到有很多吧。具体这些都是什么意思可以查查相关的API资料。这里我们只传入了一个DT_CENTER常数,意思是居中显示。默认可以为0,因为这里为文字显示格式,所以你什么格式也不想要的话可设为0以后文字显示在左上角。
OK。F5运行之。。。窗体中间正常显示“这就是文字效果”的几个文字。
至此这里API相关结构的填充与获取我不想再多说了,不懂的话建议把我以前发的API入门帖子与这里的第一小节一起看看,或许你会明白些什么?? |
评分
-
查看全部评分
|