DrawText 在指定的区域中输出格式化的文本 是一个高级输出的函数
函数原型:
int DrawText(
HDC hDC,
LPCTSTR lpString,
int nCount,
LPRECT lpRect,
UNIT uFormat
);
hDC是设备上下文句柄。lpString指向将要绘制的UNICODE文本。nCount是要输出的字符数。如果在DrawText中使用以NULL结尾的字符串,就可以将nCount设定为-1,Windows会自动计算字符串的长度。lpRect指向rect结构体,指定了文本格式化的矩形区域。uFormat是格式化标记,也是这里面稍显复杂的一个参数。
下面是几个常用的格式化标记:
DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行。如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符。出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本。
DT_CENTER:指定文本水平居中显示。
DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用。
DT_SINGLELINE:单行显示文本,回车和换行符都不断行。
DrawText 的使用案例:
#include<windows.h> #include<stdio.h> LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow ) { WNDCLASS wndcls; wndcls.style = CS_HREDRAW | CS_VREDRAW; wndcls.lpfnWndProc = (WNDPROC)WndProc; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hInstance = hInstance; wndcls.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndcls.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); wndcls.hCursor=LoadCursor(NULL,IDC_ARROW); wndcls.lpszClassName="HELLO"; wndcls.lpszMenuName=NULL; if(!RegisterClass(&wndcls)) { return FALSE; } HWND hwnd; hwnd=CreateWindow("HELLO","HELLOWORLD",WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch(message) { case WM_CREATE: // PlaySound(/*TEXT("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC*/); return 0; case WM_PAINT: hdc=BeginPaint(hwnd,&ps); // TextOut(hdc,250,150,"HELLO",strlen("HELLO")); DrawText(ps.hdc, "朋友,你好。",strlen("朋友,你好。"), &ps.rcPaint, DT_CENTER); EndPaint(hwnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); } return 0; }
SetTextColor (hdc, rgbColor) ;
这个函数的功能是设置文本的前景色
SetBkColor (hdc, rgbColor) ;
这个函数的功能是设置文本的背景色SetBkMode (hdc, iMode) ;这个函数的功能是设置背景色透明与不透明
iMode是要设置的模式,其值可以为OPAQUE和TRANSPARENT。