转自:http://blog.csdn.net/sagakiss/article/details/1707608
新建Win32项目
新建文件CreateDeviceMy.cpp代码如下:
//包含Dx9的头文件 #include <d3d9.h> #pragma warning( disable : 4996 ) //除去警告 #include <strsafe.h> #pragma warning( default : 4996 ) //----------------------------------------------------------------------------- // 全局参数 //----------------------------------------------------------------------------- LPDIRECT3D9 g_pD3D = NULL; // 创建 D3DDevice LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // 我们使用的渲染设备 //----------------------------------------------------------------------------- // 名称: InitD3D() // 描述: 初始化 Direct3D //----------------------------------------------------------------------------- HRESULT InitD3D( HWND hWnd ) { // 根据版本创建D3D对象 if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; //设置参数 D3DPRESENT_PARAMETERS d3dpp; //参数对象,用于下面的设备创建 ZeroMemory( &d3dpp, sizeof(d3dpp) ); //用0来填充d3dpp内存区域,也就是初始化内存 d3dpp.Windowed = TRUE; //设置为窗口模式 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //交换缓冲支持的效果类型,指定表面在交换链中是如何被交换的。这里为后备的缓存加载之后就删除。 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; //显示模式 //创建设备驱动Direct3D if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, //默认适配器 D3DDEVTYPE_HAL, //硬件驱动 hWnd, //设备所使用的窗体 D3DCREATE_SOFTWARE_VERTEXPROCESSING, //顶点像素渲染方式 &d3dpp, //参数 &g_pd3dDevice //驱动设备 ) ) ) { return E_FAIL; } // 初始化完成 return S_OK; } //----------------------------------------------------------------------------- // 名称: Cleanup() // 描述: 释放所有初始化对象 //----------------------------------------------------------------------------- VOID Cleanup() { if( g_pd3dDevice != NULL) g_pd3dDevice->Release(); if( g_pD3D != NULL) g_pD3D->Release(); } //----------------------------------------------------------------------------- // 名称: Render() // 描述: 绘制场景 //----------------------------------------------------------------------------- VOID Render() { if( NULL == g_pd3dDevice ) return; //清除背景缓存并重新设置为蓝色 g_pd3dDevice->Clear( 0, // pRects中的矩形数,如果 pRects为NULL着该参数必须为0 NULL, //一个指向D3DRECT结构体的指针 D3DCLEAR_TARGET, //D3DCLEAR标志,现在为清空当前的渲染器 D3DCOLOR_XRGB(0,0,255), //颜色 1.0f, // depth buffer的新z值 0 //模板 ); // 开始渲染场景 if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) { // 可以在这里渲染场景 // 结束渲染 g_pd3dDevice->EndScene(); } // 清苦当前缓存中的数据 g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } //----------------------------------------------------------------------------- // 名称: MsgProc() // 描述: Windows窗体句柄 //----------------------------------------------------------------------------- LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: Cleanup(); PostQuitMessage( 0 ); return 0; case WM_PAINT: Render(); ValidateRect( hWnd, NULL );//效验矩形数据 return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } //WinMain函数入口 INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT) { //直接初始化结构体 /* GetModuleHandle 函数是返回一个模块在当前进程地址空间的HMODULE 如果函数参数值为NULL则返回一个虚拟当前句柄. */ WNDCLASSEX wc = { sizeof(WNDCLASSEX), //指定了以字节为单位的结构的大小 CS_CLASSDC, //所有属于该类的窗口实例共享相同的DC MsgProc, //是指向窗口过程的指针 0L, //………… 0L, //………… GetModuleHandle(NULL), //是指向窗口过程实例的句柄 NULL, //指向窗口图标的句柄 NULL, //指向窗口光标的句柄 NULL, //背景刷 NULL, //菜单 "D3D Tutorial", //类名 NULL //指向小图标的句柄 }; //注册窗体类 RegisterClassEx( &wc ); //创建窗体 HWND hWnd = CreateWindow( "D3D Tutorial", //窗体的类名 "D3D Tutorial 01: CreateDevice", //标题 WS_OVERLAPPEDWINDOW, //窗体风格 100, //位置坐标x 100, //位置坐标y 300, //宽 300, //高 NULL, //父窗口 NULL, //菜单 wc.hInstance, //窗体类句柄,2000以上的系统无含义! NULL //窗体结构参数 ); // Initialize Direct3D if( SUCCEEDED( InitD3D( hWnd ) ) ) { // Show the window ShowWindow( hWnd, SW_SHOWDEFAULT ); UpdateWindow( hWnd ); // Enter the message loop MSG msg; while( GetMessage( &msg, NULL, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } UnregisterClass( "D3D Tutorial", wc.hInstance ); return 0; }
将字符集设成未设置
添加库和引用:
1.添加附加依赖项:
d3d9.lib
d3dx9.lib
Winmm.lib
2.添加附加库目录:
库目录指向direct sdk目录,默认安装是:C:\Program Files %28x86%29\Microsoft DirectX SDK %28June 2010%29\Lib\x86
3.添加包含目录,指向direct sdk的includ目录(不然不能引用#include <d3dx9.h>)
程序运行结果(此为文件图,下载png图片,后缀改为rar可以解压出项目,制作方法):
最简程序2:程序运行结果(此为文件图,下载png图片,后缀改为rar可以解压出项目,制作方法):