添加头文件
#include <windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
定义变量:
private:
IDirect3D9 *pDirect9;
IDirect3DDevice9 *pDevice9;
LPD3DXFONT g_font;
使用类向导添加WM_CLOSE,WM_TIMER
在OnInitDialog()里面添加
pDirect9 = Direct3DCreate9(D3D_SDK_VERSION);
if (pDirect9)
{
D3DPRESENT_PARAMETERS dp;
dp.BackBufferWidth = 640; //后备缓冲表面的宽度(以像素为单位)
dp.BackBufferHeight = 480; //后备缓冲表面的高度(以像素为单位)
dp.BackBufferCount = 1; //后备缓冲表面的数量,通常设为“1”,即只有一个后备表面
dp.BackBufferFormat = D3DFMT_A8R8G8B8; //后备缓冲表面的像素格式(如:32位像素格式为D3DFMT——A8R8G8B8)
dp.MultiSampleType = D3DMULTISAMPLE_NONE; //全屏抗锯齿的类型,详情请看SDK
dp.MultiSampleQuality = 0; //全屏抗锯齿的质量等级,详情看SDK
dp.SwapEffect = D3DSWAPEFFECT_DISCARD; //指定表面在交换链中是如何被交换的,取D3DSWAPEFFECT枚举类型中的一个成员。其中D3DSWAPEFFECT_DISCARD是最有效的
dp.hDeviceWindow = m_hWnd;
dp.Windowed = true; //设为true则为窗口模式,false则为全屏模式
dp.EnableAutoDepthStencil = true; //设为true,D3D将自动创建深度/模版缓冲
dp.AutoDepthStencilFormat = D3DFMT_D24S8; //深度/模版缓冲的格式
dp.Flags = 0; //一些附加特性,设为0或D3DPRESENTFLAG类型的一个成员。下列两个最常用的标志全部的标志请查阅SDK:
dp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; //刷新率,设定D3DPRESENT_RATE_DEFAULT使用默认刷新率
dp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //属于D3DPRESENT成员,又有两个常用标志,其余请查SDK:D3DPRESENT_INTERVAL_IMMEDIATE——立即交换.D3DPRESENT_INTERVAL_DEFAULT——D3D选择交换速度,通常等于刷新率
pDirect9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &dp, &pDevice9);
}
SetTimer(0, 100, NULL);
if (pDevice9){
pDevice9->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(255, 255, 0, 0), 1.0f, 0),
pDevice9->BeginScene();
D3DXFONT_DESC df;
ZeroMemory(&df, sizeof(D3DXFONT_DESC));
df.Height = 25;
df.Width = 12;
df.Weight = 100;
df.MipLevels = D3DX_DEFAULT;
df.Italic = false;
df.CharSet = DEFAULT_CHARSET;
df.Quality = 0;
df.PitchAndFamily = 0;
wcscpy(df.FaceName, L"宋体");
//创建ID3DXFont 接口对象
D3DXCreateFontIndirect(pDevice9, &df, &g_font);
//居中绘制文本
RECT g_FontPosition = { 0, 0, 300, 300 };
g_font->DrawText(NULL, L"深圳", -1, &g_FontPosition,
DT_CENTER | DT_VCENTER, D3DCOLOR_XRGB(255, 255, 255));
pDevice9->EndScene();
pDevice9->Present(NULL, NULL, m_hWnd, NULL);
}
退出
if (pDirect9){
pDirect9->Release();
}
if (pDevice9){
pDevice9->Release();
}
KillTimer(0);
效果图: