D3D字体-ID3DXFont[转载]

   以前有到CD3DFont来绘制字体,CD3DFont使用DirectX代替GDI来渲染,比ID3DXFont快得多。然而,CD3DFont不能联合字体句柄和格式化ID3DXFont。假如是一些简单的英文字体可以用CD3DFont,但若用到了中文,只能舍CD3DFont用ID3DXFont了。

  下面是一个使用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 //文字颜色
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值