none
能否在mfc框架中使用DirectX的IDirect3DSurface接口呢? RRS feed

  • 问题

  • 尝试在MFC的对话框程序中使用IDirect3DSurface来绘图 

    在对话框初始化中InitDirect3D,然后RenderD3D

    void Wave::RenderD3D ()
    {
        if( NULL == pD3DDevice )
            return;
        //清屏
        pD3DDevice->Clear( 0,//矩形数目 
            NULL, //矩形范围  第一个参数不为0时有效
            D3DCLEAR_TARGET,//清除标志
            D3DCOLOR_XRGB( 0,0,0),//颜色 
            1.0f, //Zbuffer
            0 );//stencil buffer.
        pD3DDevice->BeginScene();
        D3DSURFACE_DESC surfacedesc; 
        //得到后台页面
        pD3DDevice->GetBackBuffer( 0,//换页描绘
            0,//Buffer链索引
            D3DBACKBUFFER_TYPE_MONO,//唯一有效的值
            &backbuffer);//后台页面指针
        backbuffer->GetDesc(&surfacedesc);
        D3DLOCKED_RECT lr;
        if( FAILED( backbuffer->LockRect(&lr,NULL,D3DLOCK_NOSYSLOCK)) )
        {
            return;
        }
        DWORD* pBuf = (DWORD*)lr.pBits;
        for(int i = 0; i < surfacedesc.Height; i++)  
        {  
            for(int j = 0; j < surfacedesc.Width; j++)  
            {  
                int index = i * lr.Pitch / 4 + j;  
                pBuf [index] = 0xffff0000; // red  
            }  
        }  
        //     HDC m_dc;
        //     backbuffer->GetDC(&m_dc); 
        //     CDC *pDC;
        //     pDC = CDC::FromHandle(m_dc);
        //     pDC->SetTextColor(RGB(10,10,10));
        //     pDC->TextOutW(10,10,_T("ABCD"));
        //     backbuffer->ReleaseDC(m_dc);
        backbuffer->UnlockRect();
        //页面拷贝
        pD3DDevice->StretchRect(srcSurface,//源页面
            NULL,//源页面区域
            backbuffer,//目的页面
            m_rcCanvas,//目的页面区域
            D3DTEXF_LINEAR);//过滤类型
        //翻页
        pD3DDevice->Present( NULL, //源区域 Null为整个后台页面
            NULL, //目的区域
            NULL, 
            NULL );//Buffer Null为全部Buffer
        pD3DDevice->EndScene();
    }

    但是显示不出来,在里面GetDC好像也么问题,但是也不能显示。。。

    在mfc中能不能这样用啊?

    2017年3月29日 6:44