int CDxTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
InitD3D(&m_pD3D,&m_pDevice,m_hWnd);
// TODO: Add your specialized creation code here

return 0;
}
void InitD3D(LPDIRECT3D9 * ppD3D,LPDIRECT3DDEVICE9 *ppDevice,HWND hWnd)
{
//创建Direct3D 对象,并获取接口IDirect3D9 的指针,
//我们将通过该指针操作Direct3D 对象。
*ppD3D = ::Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS d3dpp;
::ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE; //创建窗口模式的Direct3D 程序
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
//调用方法IDirect3D9::CreateDevice 创建设备对象,并获取
//接口IDirect3DDevice9 的指针,我们将通过该指针操作设备对象
(*ppD3D)->CreateDevice(
D3DADAPTER_DEFAULT, //使用缺省的显卡
D3DDEVTYPE_HAL, //指定设备类型为HAL
hWnd, //Direct3D窗口的句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,//软件顶点处理
&d3dpp, ppDevice);
}
运行到最后一个语句出错:DEBUG输出:
Direct3D9: (ERROR) :Failed to create driver surface
Direct3D9: (ERROR) :Failed to initialize primary swapchain
Direct3D9: (ERROR) :Failed to initialize Framework Device. CreateDevice Failed.
怎样才能不出错?不好意思,因为没怎么用过DirectX,问题一大堆

解决方案 »

  1.   

    http://www.gameres.com/Articles/Program/Abstract/Thinking/MFCDX8.htm
      

  2.   

    我就是想在View中创建DirectX设备,为什么不成功?是不是因为View是子窗口,不能在子窗口中创建DirectX设备?
    (*ppD3D)->CreateDevice(
    D3DADAPTER_DEFAULT, //使用缺省的显卡
    D3DDEVTYPE_HAL, //指定设备类型为HAL
    hWnd, //Direct3D窗口的句柄
    D3DCREATE_SOFTWARE_VERTEXPROCESSING,//软件顶点处理
    &d3dpp, ppDevice);
      

  3.   

    call it in OnInitialUpdate()I don't have DirectX installed, so cannot verify the code in this article:http://www.moon-labs.com/resources/IntegratingDirect3D9.0WithMFC.pdfalso see
    Using Direct3D with MFC
    http://www.cs.wisc.edu/~tlabonne/d3dmfc.html
      

  4.   

    call it in OnInitialUpdate()
    呵呵,原来就是这么简单的问题……