level 1
在使用DrawText这个API的时候,发现它的参数DT_CALCRECT和它的解释不符合.如下:这个参数的解释是这样的:象下面这样计算格式化矩形:多行绘图时矩形的底边根据需要进行延展,以便容下所有文字;单行绘图时,延展矩形的右侧。函数不描绘文字。由lpRect参数指定的矩形会载入计算出来的值备注:函数DrawText用设备环境中的字体选择、正文颜色和背景颜色来写正文,除非DT_NOCLIP被使用,DrawText裁剪正文,所以它不会出现在指定矩形的外面,除DT_SINGLELINE格式化,其余的格式都认为正文有多行。下面是我程序里的一句DrawText [控件DC],[字符串],-1,[RECT结构],DT_CALCRECT (其中的[字符串]是带有回车的多行文字.)发现得到的[RECT结构]中的右边被拓展了,这说明了它是按单行显示而不是多行。它把[RECT结构]扩展成和在TXT文件里没有自动换行时显示的一样,我不知道怎么才可以使得右边不拓展,而在矩形的下边拓展. 高手来解决下! 2楼是我的源代码
2006年08月08日 18点08分
1
level 1
代码(截取): Dim nfile As String If CommonDialog1.FileName <> "" Then nfile = CommonDialog1.FileName Else Exit Sub End If Open nfile For Input As #1 Do Until EOF(1) ScrollText = ScrollText + Input(1, 1) Loop Close #1 DrawingRect.Right = picScroll.ScaleWidth 'picScroll是个图片框控件 DrawingRect.Bottom = picScroll.ScaleHeight rt = DrawText(picScroll.hdc, ScrollText, -1, DrawingRect, DT_CALCRECT) If rt = 0 Then 'err MsgBox "Error scrolling text", vbExclamation EndingFlag = True End If picScroll.Cls DrawText picScroll.hdc, ScrollText,-1, DrawingRect, DT_CENTER Or DT_WORDBREAK picScroll.Refresh 大家可以在ScrollText读入文件内容(要带回车的多行内容)后运行看看,根本没有实现所谓的扩展矩形底边!
2006年08月08日 18点08分
2
level 1
问题解决了,主要是函数DrawText并不会默认为多行,(虽然是多行显示) DrawText [控件DC],[字符串],-1,[RECT结构],DT_CALCRECT 应改为 DrawText [控件DC],[字符串],-1,[RECT结构],DT_WORDBREAK Or DT_CALCRECT 并且一定要在此句的前面写出[RECT结构]的所有值!切记,我就是犯了这个错误了。
2006年08月09日 08点08分
5