为什么会有坚决不用API的人呢??其实我在写程序的过程中发现API的功能很强大的,不过我实在是技术有限,在书上好像没有很深入的说明。大家有什么好的电子书介绍呢?比如说 Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long 里的 Declare是什么意思。 楼上几位高手能教教我怎样使用API来绘制文字。用Print来输出我是基本上不会使用的,本人觉得在面向对象语言中有点多此一举。还有一点,我需要对文字进行坐标定位显示。能通过计算在特定的坐标里显示文字内容。 其实在写这个程序时我发现了很多我不理解,和不会解决的问题是需要问的。以后还要请大家多多关照呢。
引用: zyl910(910:分儿,我又来了!) 只不过需要用子类拦截鼠标消息,代码复杂多了子类拦截鼠标消息是什么意思啊,我不明。还有VB里边有子类父类这概念的吗?我在使用的过程中发现好像很多都跟C里的类很相似,但VB里好像又没有特别指出过类。我算是搞糊涂了,类的认识我只在C++里边接触到,觉得类的使用很有他的优点 本人有一段VB的代码感觉就像是对类的使用,以label为基类,派生出一个然后对他进行一些赋值这跟类的操作很相似。 Set lab(0) = Controls.Add("vb.label", "lab0", Picture1)
Option ExplicitPrivate Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long Private Sub Command1_Click() Picture1.ScaleMode = vbPixels TextOut Picture1.hdc, 10, 10, "你好中国", lstrlen("你好中国") End Sub
'作者:sakurako '设置Picture1的AutoRedraw = FlasePrivate Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate 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 SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As LongPrivate Const DT_SINGLELINE = &H20Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim rectText As RECT Dim strPoint As String
Print是语句
与面向对象机制存在冲突
平时VB编译器会作特殊处理避免冲突
但有时避免不了会引起程序莫名其妙出错
所以绘制文字时建议直接用api我先前说用Print,是怕楼主是那种坚决不用API的那种人,尽量使用VB自己的东西
里的 Declare是什么意思。
楼上几位高手能教教我怎样使用API来绘制文字。用Print来输出我是基本上不会使用的,本人觉得在面向对象语言中有点多此一举。还有一点,我需要对文字进行坐标定位显示。能通过计算在特定的坐标里显示文字内容。
其实在写这个程序时我发现了很多我不理解,和不会解决的问题是需要问的。以后还要请大家多多关照呢。
本人有一段VB的代码感觉就像是对类的使用,以label为基类,派生出一个然后对他进行一些赋值这跟类的操作很相似。
Set lab(0) = Controls.Add("vb.label", "lab0", Picture1)
'设置label的初始化数据
With lab(0)
.Visible = True
.Caption = A_Line(0).Auth
.BackStyle = 0
.Width = 0
.Height = 0
.AutoSize = True
.FontSize = 16
.FontBold = True
.Left = A_Line(k).x0 + (A_Line(k).x1 - A_Line(k).x0) / 2 + 5
.Top = A_Line(k).y0 + (A_Line(k).y1 - A_Line(k).y0) / 2
End With
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Sub Command1_Click()
Picture1.ScaleMode = vbPixels
TextOut Picture1.hdc, 10, 10, "你好中国", lstrlen("你好中国")
End Sub
picture1.CurrentX = A_Line(k).x0 + (A_Line(k).x1 - A_Line(k).x0) / 2 + 5
picture1.CurrentX = A_Line(k).y0 + (A_Line(k).y1 - A_Line(k).y0) / 2
picture1.Print A_Line(0).Auth
end sub你的数据好像放在A_Line中,在PictureBox的paint事件中写个循环画文字就行
专用来定制窗口功能
相当于继承了一个子类
设置CurrentX、CurrentY 属性可以控制用Print输出的文字的位置其实你创建Lable控件的时候就需要定位坐标,换成自己定坐标绘制文字还不是一样还有一点Print方法比API更方便:Print是使用VB坐标系,而不是DC坐标系,所以不需要写坐标转换代码
'设置Picture1的AutoRedraw = FlasePrivate Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate 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 SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As LongPrivate Const DT_SINGLELINE = &H20Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim rectText As RECT
Dim strPoint As String
rectText.Left = 0
rectText.Top = 0
rectText.Right = 200
rectText.Bottom = 50
strPoint = "x = " & X & ", y = " & Y
Picture1.Refresh
DrawText Picture1.hdc, strPoint, -1, rectText, DT_SINGLELINE
End Sub
我那本书的API页数真是少的可怜,只有14页,看来还得去图书馆借书来看看才行了。
与面向对象机制存在冲突
平时VB编译器会作特殊处理避免冲突
但有时避免不了会引起程序莫名其妙出错
所以绘制文字时建议直接用api