|
发表于 2010-6-19 10:44:00
|
显示全部楼层
Re:MFC + DirectDraw
假设ddraw画面绘制在控件A中,那么取得A的hwnd然后设置剪裁区。参考我的代码:
// Create a clipper for the primary surface
if(FAILED( hr = m_pddraw->CreateClipper(0,&m_pClipper,null) )) throw new C2DErr(C2DErr: X_ERR,hr);
if(FAILED( hr = m_pClipper->SetHWnd(0,m_hWnd) )) throw new C2DErr(C2DErr::DX_ERR,hr);
if(FAILED( hr = pprim->SetClipper(m_pClipper) )) throw new C2DErr(C2DErr::DX_ERR,hr);
绘制的时候,需要用Blt而不是BltFast,还有就是,要把图像绘制到前台表面的对应于你那个hwnd的坐标的位置上:
RECT rc;
::GetClientRect(m_hWnd,&rc);
POINT tmp={0,0};
::ClientToScreen(m_hWnd,&tmp);
RECT rcDest = { tmp.x, tmp.y, tmp.x+rc.right-rc.left, tmp.y+rc.bottom-rc.top };
RECT rcSrc = { 0, 0, m_pBackBuf->GetW(), m_pBackBuf->GetH() };
if(FAILED( hr = m_pPrimarySurf->m_pdds->Blt( &rcDest, m_pBackBuf->m_pdds, &rcSrc, 0|DDBLT_WAIT, null ) ))
throw new C2DErr(C2DErr::DX_ERR,hr); |
|