Windows GDI 教程(四) 文字与字体

TextOut

在目标DC的指定坐标处添加一行文字。

BOOL TextOut(
  _In_  HDC hdc,			// DC句柄
  _In_  int nXStart,		// x坐标
  _In_  int nYStart,		// y坐标
  _In_  LPCTSTR lpString,	// 文字内容
  _In_  int cchString		// 文字长度
);

输出文字实例

void Paint(HWND hwnd)
{
    PAINTSTRUCT ps;
    HDC hdc;

	hdc = BeginPaint(hwnd, &ps); 
	
	// 设置文字背景色
	SetBkColor(hdc, RGB(0,0,0));
	// 设置文字颜色
	SetTextColor(hdc, RGB(255,255,255));
	// 输出文字 Helloworld
	TextOut(hdc, 50, 50, TEXT("Hello world"), sizeof(TEXT("Hello world")));

	EndPaint(hwnd, &ps); 
}

效果图:
输出文字

选择字体实例

/*
 * 选择字体
 */
HFONT ChooseMyFont() 
{ 
	CHOOSEFONT cf; 
	LOGFONT lf; 
	HFONT hfont; 

	// CHOOSEFONT 结构 
	cf.lStructSize = sizeof(CHOOSEFONT); 
	cf.hwndOwner = (HWND)NULL; 
	cf.hDC = (HDC)NULL; 
	cf.lpLogFont = &lf; 
	cf.iPointSize = 0; 
	cf.Flags = CF_SCREENFONTS; 
	cf.rgbColors = RGB(0,0,0); 
	cf.lCustData = 0L; 
	cf.lpfnHook = (LPCFHOOKPROC)NULL; 
	cf.lpTemplateName = (LPSTR)NULL; 
	cf.hInstance = (HINSTANCE) NULL; 
	cf.lpszStyle = (LPSTR)NULL; 
	cf.nFontType = SCREEN_FONTTYPE; 
	cf.nSizeMin = 0; 
	cf.nSizeMax = 0; 

	// 选择字体对话框 
	ChooseFont(&cf); 
	// 得到HFONT 返回
	hfont = CreateFontIndirect(cf.lpLogFont); 
	return (hfont); 
}

void Paint(HWND hwnd)
{
    PAINTSTRUCT ps;
    HDC hdc;
	HFONT hFontSetting;

	hdc = BeginPaint(hwnd, &ps); 

	// 获得字体对象句柄
	hFontSetting = ChooseMyFont();
	// DC 加载字体
	SelectObject(hdc, hFontSetting);

	// 同样输出文字 Helloworld
	TextOut(hdc, 0, 0, TEXT("Hello world"), sizeof(TEXT("Hello world")));

	EndPaint(hwnd, &ps); 
}

效果图:
选择字体
字体+大小

设置排版实例

除了 TextOut 之外,DrawText也可以用于输出文字,他比 TextOut 要多出来的地方就是可以指定文字所在的区域,然后设置文字在该区域内的排版

void Paint(HWND hwnd)
{
    PAINTSTRUCT ps;
    HDC hdc;
	RECT rc;

	hdc = BeginPaint(hwnd, &ps); 

	// 获取当前窗口的矩形区域
	GetClientRect(hwnd, &rc); // 实际上就是获取左上和右下的两个坐标
	
	DrawText(
		hdc,
		TEXT("Hello worldnHello Windows GDI"),	// 文字内容
		strlen(TEXT("Hello worldnHello Windows GDI")), // 文字长度
		&rc,		// 输出区域
		DT_CENTER	// 排版格式 居中
	);

	EndPaint(hwnd, &ps); 
}

效果图:
drawtext

教程索引

上一节:Windows GDI 教程(三) 绘制函数图像以及多边形
下一节:Windows GDI 教程(五) 填充图形和画刷

Advertisements

1 thought on “Windows GDI 教程(四) 文字与字体

  1. 作者的细心写作和对知识通透的理解力很吸引我。学习GDI,靠你啦!冰森先生!

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s