Windows API一日一练(24)DrawText函数

Post date: 2012/3/27 上午 07:22:28

分类: Direct3D2007-08-27 22:55 11184人阅读 评论(2) 收藏 举报

DrawText函数与前面介绍的TextOut函数都是文本输出函数,但它们是有区别的。DrawText函数是格式化输出函数,而TextOut函数不具备这样的功能。因而DrawText函数比TextOut函数功能强大,可以让文本输出时左对齐,或者右对齐,或者中间对齐,还可以让文本适应输出矩形内,如果超出时可以截断,或者显示为省略号的方式。DrawText函数在表格方式显示时肯定要使用到的函数。

函数DrawText声明如下:

WINUSERAPI

int

WINAPI

DrawTextA(

__in HDC hdc,

__inout_ecount(cchText) LPCSTR lpchText,

__in int cchText,

__inout LPRECT lprc,

__in UINT format);

WINUSERAPI

int

WINAPI

DrawTextW(

__in HDC hdc,

__inout_ecount(cchText) LPCWSTR lpchText,

__in int cchText,

__inout LPRECT lprc,

__in UINT format);

#ifdef UNICODE

#define DrawText DrawTextW

#else

#define DrawText DrawTextA

#endif // !UNICODE

hdc是当前设备的句柄。

lpchText是输出文本的缓冲区首地址。

cchText是输出文本的字符个数。

lprc是输出的显示区域。

format是用什么格式输出。

调用这个函数的例子如下:

#001 //

#002 //界面显示输出.

#003 //

#004 //蔡军生 2007/08/27 QQ:9073204 深圳

#005 //

#006 void CCaiWinMsg::OnDraw(HDC hDC)

#007 {

#008 //

#009 std::wstring strShow(_T("C++窗口类的实现,2007-08-27"));

#010 TextOut(hDC,10,10,strShow.c_str(),(int)strShow.length());

#011

#012 //设置输出字符串的颜色.

#013 COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));

#014

#015 RECT rcText;

#016

#017 //显示不全.

#018 rcText.left = 10;

#019 rcText.top = 30;

#020 rcText.right = 100;

#021 rcText.bottom = 50;

#022

#023 DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,

#024 DT_LEFT|DT_SINGLELINE|DT_END_ELLIPSIS);

#025

#026 //完全显示,左对齐.

#027 rcText.left = 10;

#028 rcText.top = 50;

#029 rcText.right = 300;

#030 rcText.bottom = 80;

#031

#032 DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,

#033 DT_LEFT|DT_SINGLELINE|DT_END_ELLIPSIS);

#034

#035

#036 SetTextColor(hDC,RGB(0,0,255));

#037 //完全显示,右对齐.

#038 rcText.left = 10;

#039 rcText.top = 80;

#040 rcText.right = 300;

#041 rcText.bottom = 110;

#042

#043 strShow = _T("A&bcd");

#044 DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,

#045 DT_RIGHT|DT_SINGLELINE|DT_END_ELLIPSIS);

#046

#047

#048 //

#049 SetTextColor(hDC,crOld);

#050 }