DrawText

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。
(以下内容来自百度)
对透明的理解:在窗体或控件输出的字符串或图形是有背景色的。而窗体或控件也是有背景色的。这两种背景色一般是不同的, 这样输出图形或字符串时,两种背景(窗体或控件的背景色、符串或图形的背景色)重叠在一起了,影响美观,为了不让这两种背景重叠,可以设置背景模式为TRANSPARENT(透明的),即让输出的字符串或图形的背景色不可见。可以这样理解:把输出的字符串或图形的背景色看成是一物体,窗体或控件看成另一物体,字符串或图形在窗体或控件前面挡住窗体或控件了(因为输出 的字符串或图形是画在窗体或控件上的,所以可以这么类比),但是透过字符串或图形能看到窗体或控件。即字符串或图形的背 景色所代表的物体是透明的。





你可能感兴趣的:(DrawText)