下面是一个使用ID3DXFont的简单例子
1)创建一个ID3DFont
我们能够使用D3DXCreateFontIndirect函数来创建一个ID3DXFont接口。
HRESULT D3DXCreateFontIndirect(
LPDIRECT3DDEVICE9 pDevice, // device to be associated with the font
CONST LOGFONT* pLogFont, // LOGFONT structure describing the font
LPD3DXFONT* ppFont // return the created font
);
下面的代码片段显示了怎样使用这个函数:
LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
lf.lfHeight = 25; // in logical units
lf.lfWidth = 12; // in logical units
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = 500; // boldness, range 0(light) - 1000(bold)
lf.lfItalic = false;
lf.lfUnderline = false;
lf.lfStrikeOut = false;
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfOutPrecision = 0;
lf.lfClipPrecision = 0;
lf.lfQuality = 0;
lf.lfPitchAndFamily = 0;
strcpy(lf.lfFaceName, "Times New Roman"); // font style
在这里看上去参数挺多,挺郁闷的,其实 LOGFONT 中有许多的字段,都不用费心去设置,可以使用各自的缺省值即可。但必须要设置的字段有:lfHeight,lfWidth,IfItalic(斜体),IfUnderline(下戏线)以及IfFaceName.
ID3DXFont* font = 0;
if(FAILED(D3DXCreateFontIndirect(Device, &lf, &Font)))
{
::MessageBox(0, "D3DXCreateFontIndirect() - FAILED", 0, 0);
::PostQuitMessage(0);
}
我们必须填充一个 LOGFONT 结构来描述想创建的字体类型。
注意:你也能够使用 D3DXCreateFont 函数来获得一个 ID3DXFont 接口指针。
2)绘制文本
一旦我们获得了ID3DXFont接口指针,绘制文本
ID3DXFont::DrawText方法就可以实现了。
INT ID3DXFont::DrawText(
LPCSTR pString,
INT Count,
LPRECT pRect,
DWORD Format,
D3DCOLOR Color
);
pString 指向要绘制的文字。
Count 字符串中特征字符的数量。假如字符是以 null 结束的字符串则可将其指定为-1。
pRect 指向一个 RECT 结构,它定义一个文字被绘制在屏幕上的范围。
Format 可选参数,指定文字怎样被格式化;要获得更详细的信息请查看 SDK 文档。
Color 文字的颜色。
例子:
RECT rect = {0, 0, Width, Height};//Width,Height为窗口的宽高,可以自己设定想要的大小
Font->DrawText(
"Hello World", // 要绘制的文字,可以是中文
-1, //字符串中特征字符的数量
&rect, // 绘制文字的范围
DT_TOP | DT_LEFT, // Draw in top-left corner of rect.
0xff000000 //文字颜色
);