yuanlulaomao() ( ) 信誉:100  2006-08-10 11:18:00  得分: 0  
弄了半天,发现文字显示不完的原因是因为DT_CALCRECT这个参数实现的是对场景的右边的扩展,没有对下边进行扩展. 
这个DrawText函数在显示字符串的时候,对于数字串如1234567和英文单词不能换行显示,而只能对汉字换行,有没有什么办法实现数字串或者字母串的自动换行? 
还有个问题,就是: DrawText [控件DC],[字符串],-1,[RECT结构],DT_CALCRECT 
发现得到得[RECT结构]中的右边被拓展了,这就是说它实现的是单行绘图,那么怎样进行多行绘图呢?它把[RECT结构]拓展得和在文本文件里没有自动换行时显示的一样,我不知道怎么才可以使得右边不拓展,而在下边拓展.
这个参数错误了,不知道怎么解决了,是不是只有用手工编程解决,把所有所有文字统计下,算出各种类型文字的宽度,然后除以图片框的宽度,得到要显示的行数,然后把行数加上回车符的个数,就是总行数.把总行数乘以文字的高度,就是矩形的高度了... 请高手来帮忙解决一下!
 yuanlulaomao() ( ) 信誉:100  2006-08-10 11:18:00  得分: 0  
o 知道了,原来是0就是代表左对齐,1就代表居中对齐,~~~~~~
但是那个文件显示不全的还是解决不了~
 lsftest() ( ) 信誉:115  2006-08-09 14:01:00  得分: 0  
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弄了半天,发现文字显示不完的原因是因为DT_CALCRECT这个参数实现的是对场景的右边的扩展,没有对下边进行扩展. 
==========================
可以扩展:
1.wFormat参数必须含有dt_wordbreak设置值,让文字若超出边界时会自动换行。。
2.调用drawtext前,lprect的left和top和right属性都必须设好,尤其right属性,否则drawtext不知边界在哪这个DrawText函数在显示字符串的时候,对于数字串如1234567和英文单词不能换行显示,而只能对汉字换行,有没有什么办法实现数字串或者字母串的自动换行? 
=================
我这里没有你说的问题,看看vb有没有打sp5还有个问题,就是: DrawText [控件DC],[字符串],-1,[RECT结构],DT_CALCRECT 
发现得到得[RECT结构]中的右边被拓展了,这就是说它实现的是单行绘图,那么怎样进行多行绘图呢?它把[RECT结构]拓展得和在文本文件里没有自动换行时显示的一样,我不知道怎么才可以使得右边不拓展,而在下边拓展.
============
解决方法见上面。。
 yuanlulaomao() ( ) 信誉:100  2006-08-10 10:42:00  得分: 0  
啊,我用的dt_wordbreak参数,但是好象只是比原来多显示了些内容,但是还是没有显示结束,drawtext的参数中究竟如何设置(有和依据)如:
Const DT_BOTTOM As Long = &H8
Const DT_CALCRECT As Long = &H400
Const DT_CENTER As Long = &H0
Const DT_EXPANDTABS As Long = &H40
Const DT_EXTERNALLEADING As Long = &H200
Const DT_LEFT As Long = &H0
Const DT_NOCLIP As Long = &H100
Const DT_NOPREFIX As Long = &H800
Const DT_RIGHT As Long = &H2
Const DT_SINGLELINE As Long = &H20
Const DT_TABSTOP As Long = &H80
Const DT_TOP As Long = &H0
Const DT_VCENTER As Long = &H4
Const DT_WORDBREAK As Long = &H10后面的这些常数(如DT_CALCRECT  定义为  &H400 )有什么样的含义啊,这样设置有什么依据吗?
我把他换成&H700 or  &H400 or &H600  有用,但是换成&H300 和&H800 等DT_CALCRECT参数就好象无效了!
设置有什么依据嘛?
是不是:   4     0    0    (H)
         0100  0000 0000  (B)
          6     0    0    (H)     
         0110  0000 0000  (B)
          7     0    0    (H)
         0111  0000 0000  (B)
难道是从左至右的第二位为1时该参数有效?
请高手指点~~~
 lsftest() ( ) 信誉:115  2006-08-10 17:54:00  得分: 0 
试了一下,是有点问题
Option Explicit
'Const LongStr = "Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the lpRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text."
Const LongStr = "我用的参数但是好象只是比原来多显示了些内容但是还是没有显示结束"
Private Sub Command1_Click()
    Dim r As RECT, s As SIZE    
    r.Left = 50: r.Top = 20
    DrawText Me.hDC, "Draw Text Test", 28, r, DT_CALCRECT
   ' Line (r.Left, r.Top)-(r.Right, r.Bottom), RGB(255, 255, 0), BF
    DrawText Me.hDC, "Draw Text Test", 14, r, 0
    
    r.Left = 50: r.Top = 50: r.Right = 300
    DrawText Me.hDC, LongStr, LenB(LongStr), r, DT_CALCRECT Or DT_WORDBREAK
    'Line (r.Left, r.Top)-(r.Right, r.Bottom), RGB(255, 255, 0), BF
    DrawText Me.hDC, LongStr, LenB(LongStr), r, DT_WORDBREAK
End Sub
'上面那个字符串用len可以正常,下面那个用lenb可以正常,但如果字符串有中文、数字、英文混合就显示不正确这跟编码有关还没想到办法 yuanlulaomao() ( ) 信誉:100  2006-08-10 20:39:00  得分: 0  哦,是啊,我试过了,加了DT_CALCRECT 以后就不能显示了,不知道是不是DT_CALCRECT 的参数设置错误,DT_CALCRECT 是用来把矩形区域向下自由扩展的,但是我扩展了以后就不能显示了,不知道是不是我用来测试的文本长度太长,然后将DrawingRect.Bottom值计算出来的过大而推迟了我看到效果,而我又没有耐心的等下去,也许~~~~好象在picture属性中的scaleheight属性设置得过大也会影响到绘制效果出来的快慢程度,不知道是何原因,也许两者有关联,期待高人指点~~~~谢谢~~~~