【DirectX3D - 3-1】再谈文字渲染(总结)

文前小议

为山九仞,功亏一篑。 ——出自《尚书·旅獒》
九仞:极言其高;
亏:欠缺;篑:盛土的筐子。
堆九仞高的山,只缺一筐土而不能完成。比喻作事情只差最后一点没能完成。

自评:学习贵在坚持,知识如春起之苗,不见其长,而日有所曾。

前文【DirectX3D - 3】渲染一段文字介绍过使用 D3DCreateFontDrawText接口实现文字输出。
本文将继续介绍其他的文字输出方法。

函数接口

  • TextOut
BOOL TextOutA(
  HDC    hdc,		// 设备环境句柄,标识了当前文字输出在那个设备上
  int    x,			// 文字起点横坐标
  int    y,			// 文字七点纵坐标
  LPCSTR lpString,	// 字符串
  int    c			// 字符串长度 strlen() 或者对应宽字节 wcslen()
);
  • DrawText
int DrawText(
  HDC     hdc,
  LPCTSTR lpchText,
  int     cchText,
  LPRECT  lprc,
  UINT    format
);

这个接口之前用过了, 这里主要介绍以下,最后一个参数 format。有很多种格式,并且这些格式是可以相互组合使用的。

名称解释
DT_BOTTOM文本显示在文本框的底部对齐,该表示应该于表示 DT_SINGLENLINE 同时使用
DT_CENTER文本居中对齐
DT_LEFT文本居左对齐
DT_RIGHT文本居右对齐
DT_TOP本文顶部对齐
DT_SINGLENLINE在单独一行显示文字,按回车健文字也不换行

以上格式简要介绍,更过格式说明,参看MSDN文档

  • SetTextColor
    设置文字颜色
BOOL ListView_SetTextColor( 
  HWND hwnd, 		// 设备环境句柄
  COLORREF clrText 	// 文本颜色
);
  • SetBkMode
    设置文字背景透明
int SetBkMode(
  HDC hdc,
  int mode  // 不透明:OPAQUE  透明:TRANSPARENT
);

在 GDI中,默认的文字背景颜色是白色,如果是这样,文字输出到画面中,原画面的北京就会被破坏掉。为了去掉文字背景色,可以使用函数SetBkMode() 设置。

以上几个接口就是最长使用的文字输出接口,下表总结了其他的接口。

函数说明
SetTextCharacterExtra设置字符间距
GetCharWidth获取字体中一个字符的宽度
GetKerningParis获取指定字体的字距信息

示例代码

HDC	g_hdc=NULL;       //全局设备环境句柄

void render_font()
{
	g_hdc = GetDC(hwnd);  //获取设备环境句柄
	
	HFONT hFont=CreateFont(30,0,0,0,0,0,0,0,GB2312_CHARSET,0,0,0,0,L"微软雅黑");  //创建一种字体
	SelectObject(g_hdc,hFont);  //将字体选入设备环境中
	SetBkMode(g_hdc, TRANSPARENT);    //设置输出文字背景色为透明
	
	//定义三段文字
	wchar_t text1[]=L"为山九仞,功亏一篑。   ";
	wchar_t text2[] = L"九仞:极言其高;\
	亏:欠缺;篑:盛土的筐子。\
	堆九仞高的山,只缺一筐土而不能完成。比喻作事情只差最后一点没能完成。";
	wchar_t text3[]=L"——出自《尚书·旅獒》";
	
	//设置文字颜色并输出第一段文字
	SetTextColor(g_hdc,RGB(50,50,50));
	TextOut(g_hdc,30,150,text1,wcslen(text1));
	//设置文字颜色并输出第二段文字
	SetTextColor(g_hdc,RGB(50,50,255));
	TextOut(g_hdc,30,200,text2,wcslen(text2));
	//设置文字颜色并输出第三段文字
	SetTextColor(g_hdc,RGB(60,150,50));
	TextOut(g_hdc,800,300,text3,wcslen(text3));

	DeleteObject(hFont);//释放字体对象
	ReleaseDC(hwnd,g_hdc);  //释放设备环境
}

在这里插入图片描述

参考

[1] 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-textouta

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值