1.知识要点
- 1.用DX编写游戏的大多数情况下,都需要使用自己的字体引擎来渲染文本。特别是希望有理想的速度的情况下。
2.选定系统中已有的字体:
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT);
将SYSTEM_FIXED_FONT字体作为之后文本的字体。
系统内置TrueType字体字样名;- Courier New
- Courier New Blod
- Courier New Italic
- Courier New Blod Italic
- Times New Roman
- Times New Roman Blod
- Times New Roman Italic
- Times New Roman Blod Italic
- Arial
- Arial Blod
- Arial Italic
- Arial Blod Italic
- Symbol
3.创建字体函数CreateFont():(p125)
1
2
3
4
5
6
7
8
9
10
11
12
13
14HFONT CreateFont(int nHeight, //
int nWidth,
int nEscapement,
int nOrientation,
int fnWeight,
DWORD fdwItalic,
DWORD fwdUnderline,
DWORD fwdStrikeOut,
DWORD fwdCharSet,
DWORD fwdOutputPrecision,
DWORD fwdClipPercisiion,
DWORD fwdQuality,
DWORD fwdPitchAndFamily,
LPCTSTR lpszFace);4.字符的构成:(p140)
- 高度 : 字符总高度(单位是像素)
- 基线 : 大写字符的底线
- 上部 : 从基线到重音符号顶端的像素数
- 下部 : 从基线到小写字符扩展底边的像素数
- 内部插入的空行 : 留给重音符号的像素数
- 外部插入的空行 : 在该字符上面允许插入的其他字符的像素数
- 获取GDI正在使用的字体信息:GetTextMetrics()
1
2BOOL GetTextMetrics(HDC hdc,
LPTEXTMETRIC lptm); // 接收TextMetric的结构
- 获取GDI正在使用的字体信息:GetTextMetrics()
TEXTMETRIC结构体重包含了所有字体的信息。
作者:真是个聪明的小函数呀!(皮这一下很开心)
居中文本实例:1
2
3
4
5
6
7TEXTMETRIC tm;
GetTextMetrics(hdc,&tm);
int x_pos=WINDOW_WIDTH-
strlen("Hello world")*tm.tmAveCharWidth/2;
TextOut(hdc,x_pos,"Hello world",strlen("Hello world"));