看看下面的VC++6.0代码

大家看下面的VC++6.0代码

rect.top=30;
rect.bottom=46;
rect.left=30;
rect.right=40;
Temprect=rect;
pDC->DrawText(_T("代码代码代码"),-1,&Temprect,DT_CALCRECT|DT_WORDBREAK);
Temprect.top+=((rect.bottom-rect.top)-(Temprect.bottom-Temprect.top))/2;
Temprect.bottom=rect.bottom-(Temprect.top-rect.top);
Temprect.left+=((rect.right-rect.left)-(Temprect.right-Temprect.left))/2;
Temprect.right=rect.right-(Temprect.left-rect.left);
pDC->DrawText(_T("代码代码代码"),-1,&Temprect,DT_CENTER|DT_WORDBREAK);

如果把_T("代码代码代码")改为英文或数字输出:_T("123456789ab"),将不能得到想要的结果,字符将单行超出矩形区显示,请教各位这是什么原因,如何处理!
wzmlyx3221说详细些好吗,最好列一下代码

DrawText 函数功能:该函数在指定的矩形里写入格式化文本,根据指定的方法对文本格式化(扩展的制表符,字符对齐、折行等)。
函数原型:int DrawText(HDC hdc, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);
参数:
hdc:设备环境句柄。
lpString:指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以\0结束的。
如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符。
nCount:指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以\0结束的,DrawText会自动计算字符数。
lpRect:指向结构RECT的指针,其中包含正文将被置于其中的矩形的信息(按逻辑坐标)。
uFormat:指定格式化正文的方法。它可以下列值的任意组合,各值描述如下:
DT_BOTTOM:将正文调整到矩形底部。此值必须和DT_SINGLELINE组合。
DT_CALCRECT:决定矩形的宽和高。如果正文有多行,DrawText使用lpRect定义的矩形的宽度,并扩展矩形的底训以容纳正文的最后一行,如果正文只有一行,则DrawText改变矩形的右边界,以容纳下正文行的最后一个字符,上述任何一种情况,DrawText返回格式化正文的高度而不是写正文。
DT_CENTER:使正文在矩形中水平居中。
DT_VCENTER:使正文在矩形中垂直居中。
DT_EDITCONTROL:复制多行编辑控制的正文显示特性,特殊地,为编辑控制的平均字符宽度是以同样的方法计算的,此函数不显示只是部分可见的最后一行。
DT_END_ELLIPSIS或DT_PATH_ELLIPSIS:可以指定DT_END_ELLIPSIS来替换在字符串末尾的字符,或指定DT_PATH_ELLIPSIS来替换字符串中间的字符。如果字符串里含有反斜扛,DT_PATH_ELLIPSIS尽可能地保留最后一个反斜杠之后的正文。
DT_EXPANDTABS:扩展制表符,每个制表符的缺省字符数是8。
DT_EXTERNALLEADING:在行的高度里包含字体的外部标头,通常,外部标头不被包含在正文行的高度里。
DT_INTERNAL:用系统字体来计算正文度量。
DT_LEFT:正文左对齐。
DT_MODIFYSTRING:修改给定的字符串来匹配显示的正文,此标志必须和DT_END_ELLIPSIS或DT_PATH_ELLIPSIS同时使用。
DT_NOCLIP:无裁剪绘制当DT_NOCLIP使用时DrawText的使用会有所加快。
DT_NOPREFIX:关闭前缀字符的处理,通常DrawText解释助记前缀字符,&为给其后的字符加下划线,解释&&为显示单个&。指定DT_NOPREFIX,这种处理被关闭。
DT_RIGHT:正文右对齐。
DT_RTLREADING:当选择进设备环境的字体是Hebrew或Arabicf时,为双向正文安排从右到左的阅读顺序都是从左到右的。
DT_SINGLELINE:显示正文的同一行,回车和换行符都不能折行。
DT_TABSTOP:设置制表,参数uFormat的15"C8位(低位字中的高位字节)指定每个制表符的字符数,每个制表符的缺省字符数是8。
DT_TOP:正文顶端对齐(仅对单行)。DT_VCENTER:正文水平居中(仅对单行)。
DT_WORDBREAK:断开字。当一行中的字符将会延伸到由lpRect指定的矩形的边框时,此行自动地在字之间断开。一个回车一换行也能使行折断。
DT_WORD_ELLIPSIS:截短不符合矩形的正文,并增加椭圆。
注意:DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP, DT_NOPREFIX值不能和DT_TABSTOP值一起使用。
返回值:如果函数调用成功,返回值是正文的高度;如果函数调用失败,返回值是0。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
备注:函数DrawText用设备环境中的字体选择、正文颜色和背景颜色来写正文,除非DT_NOCLIP被使用,DrawText裁剪正文,所以它不会出现在指定矩形的外面,除DT_SINGLELINE格式化,其余的格式都认为正文有多行。
如果选择的字体对指定的矩形而言太大,DrawText不会试图去换成一种小字体。
Windows CE:如果为参数uFormat指定DT_CALCRECT值,必须为lpRect指向的RECT结构设置right和bottom成员。Windows CE不支持uFormat为DT_EXTERNALLEADING。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib;Unicode:在Windows NT环境下以Unicode和ANSI两种方式实现。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-05-09
因为对于数字、字符、和汉字dc为他们准备设备上下文所占的宽度和高度是不一样的,你要对一个确定的字符串进行操作,比如你画矩形的时候可以先确定一个point,然后size却是由gettextcontent(”str“)得到的size确定,这样你画的矩形就是由你的字符串的内容决定大小了,如果你想在确定大小的矩形中输出你放置的内容,那你就要先用gettextmetrics当前dc的metric然后根据这个结构体中的数据来设置cfont了!
第2个回答  2009-04-25
你要的是自动换行吧。
pDC->DrawText(_T("代码代码代码"),-1,&Temprect,DT_CENTER|DT_WORDBREAK|DT_EDITCONTROL);
就可以了。

看看下面的VC++6.0代码
DrawText 函数功能:该函数在指定的矩形里写入格式化文本,根据指定的方法对文本格式化(扩展的制表符,字符对齐、折行等)。函数原型:int DrawText(HDC hdc, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);参数:hdc:设备环境句柄。lpString:指向将被写入的字符串的指针,如果参数nCo...

vc++6.0计算器代码
4为除bool bflag = false; \/\/输入是否为第二个操作数代码如下:void CcalcDlg::OnBnClickedAc() \/\/AC{flag = 0;bflag = false;str1 = _T("")

用VC++6.0 编译 代码时,提示 执行 cl.exe 时出错!是什么意思啊?_百度...
回答:实际上这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\\VC98\\Bin”下面,你可以到相应的路径下找到这个应用程序。 因此问题可以按照以下方法解决:点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable...

VC++6.0清屏代码
void mian() 拼写错误 void main()cout <<"请稍候..2秒跳入主界面" 缺分号 cout <<"请稍候..2秒跳入主界面";cout <<"主界面" 却分号 cout <<"主界面";

C++编程问题,代码如下,用的是VC++6.0,编译没错,结果也出来。但是结果出...
int a[2],temp; 你定义两个空间,却要输入三个数,撑爆了(数组越界访问,溢出)!改大数组就好了 int a[20],temp;

如何用MicrosoftVisualC++6.0编写程序
保存代码后,接下来就是编译阶段。点击“构建”或相关选项,VisualC++6.0会编译你的代码。如果一切顺利,程序会成功编译。最后,只需点击运行按钮或按F5,你将在Windows控制台中看到“Hello,VC++6.0!”的输出,这就意味着程序已成功执行。总结来说,使用VisualC++6.0编写程序主要包括新建文件、编写...

vc++6.0怎么写Windows简单窗口代码
1、启动vc++6.0。 2、在文件菜单里单击新建。 3、在弹出的窗口里单击MFC AppWizard (exe)。 4、在右边的工程名称里输入程序名,例如firstc。 5、单击确定,在弹出的窗体里选择基本对话框,单击完成,单击确定。 6、这时已经生成了一个窗体 ...

我在vc++6.0中输入了(this is a C program)代码,要怎么输出这句话?本...
include <iostream> using namespace std;int main(int argc, char** argv){ cout<<"This is a C Program"<<endl;system("pause");return 0;} c代码 include <stdio.h> include <stdlib.h> int main(int argc, char** argv){ printf("This is a C Program\\n");system("pause");re...

VC++6.0 C语言 画一个斜椭圆
答案是:基于对话框的程序:void CVc6aDlg::OnPaint() {if (IsIconic()){ ...}else{\/\/就是下面的代码CPaintDC dc(this);::SetGraphicsMode(dc.GetSafeHdc(),GM_ADVANCED);XFORM xf;xf.eDx =xf.eDy = 0;xf.eM11 = 0.4330; \/\/0.5 * cos(30)xf.eM12 = -0.25;\/\/0.5 * [-...

VC++6.0编译的C语言!
这种问题不同的编译器有不同的答案,你可以试试用其他的编译器编译看看结果,VC6做了一些所谓的“优化编译”;;过程,如“浩”所言。附反编译代码:mov DWORD PTR _i$[ebp], 3 mov eax, DWORD PTR _i$[ebp]add eax, 1 mov DWORD PTR _i$[ebp], eax mov ecx, DWORD PTR _i...

相似回答