// Vsp Cpp Project File **  Add Code After...
#include <d3d9.h> 

LPDIRECT3D9 g_pD3D ; 
LPDIRECT3DDEVICE9 g_pd3dDevice ; 

HRESULT InitD3D(HWND hWnd) 
{ 
  if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) 
  { 
    return E_FAIL; 
  } 
  D3DPRESENT_PARAMETERS d3dpp ;//创建设备结构体 
  ZeroMemory(&d3dpp , sizeof(d3dpp)); 
  d3dpp.Windowed = TRUE ;//创建窗口模式 
  d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD ;//最有效的SWAP效果 
  d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;//建立一个与当前模式相匹配的后置缓冲 

  if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT , 
                              D3DDEVTYPE_HAL , hWnd , 
        D3DCREATE_SOFTWARE_VERTEXPROCESSING , 
        &d3dpp , 
        &g_pd3dDevice))) 
  { 
  return E_FAIL; 
  } 

  return S_OK; 
} 

VOID Cleanup() 
{ 
if(g_pd3dDevice != NULL) 
{ 
  g_pd3dDevice->Release(); 
} 
if(g_pD3D != NULL) 
{ 
  g_pD3D->Release(); 
} 
} 

VOID Render() 
{ 
  if(NULL == g_pd3dDevice) 
  { 
  return ; 
  } 

  //将后置缓冲清除 ，同时设置为蓝色 
  g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0); 

  if(SUCCEEDED(g_pd3dDevice->BeginScene())) 
  { 
    //实际渲染命令栏 

  g_pd3dDevice->EndScene(); 
  } 
  g_pd3dDevice->Present(NULL , NULL , NULL , NULL); 

} 

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); 
} 

INT WINAPI WinMain(HINSTANCE hInst , HINSTANCE , LPSTR , INT) 
{ 
WNDCLASSEX wc = { 
                sizeof(WNDCLASSEX),CS_CLASSDC , MsgProc , 0L , 0L , 
      GetModuleHandle(NULL) , NULL , NULL , NULL , NULL , 
      "D3D Tutorial" , NULL 
}; 
RegisterClassEx(&wc); 

HWND hWnd = CreateWindow( 
                        "D3D Tutorial" , "D3D Tutorial01 : CreateDevice" , 
        WS_OVERLAPPEDWINDOW , 100 , 100 , 300 , 300 , 
        GetDesktopWindow() , NULL , wc.hInstance , NULL); 

if(SUCCEEDED(InitD3D(hWnd))) 
{ 
  ShowWindow(hWnd , SW_SHOWDEFAULT); 
  UpdateWindow(hWnd); 
  MSG msg ; 
  while(GetMessage(&msg , NULL , 0 , 0)) 
  { 
    TranslateMessage(&msg); 
  DispatchMessage(&msg); 
  } 
} 
                      
  UnregisterClass("D3D Tutorial" , wc.hInstance); 

  return 0; 
} 
