DirectDraw学习笔记

来源:互联网 发布:大数据是什么 编辑:程序博客网 时间:2024/06/04 18:34

1. CreateSurface创建的主表面是整个屏幕,所以设置协作级(SetCooperativeLevel)为窗口模式(DDSCL_NORMAL)时,

贴图需要设置裁剪器(LPDIRECDRAWCLIPPER),但SetDisplayMode有些什么后会失败,如有清楚原因的朋友麻烦告诉我,

不胜感激.

HRESULT hRet;//初始化IDirectDraw7接口hRet = DirectDrawCreateEx(NULL,(VOID**)&m_pDDraw,IID_IDirectDraw7,NULL);if ( hRet != DD_OK ){AfxMessageBox(_T("创建DirectDraw接口失败"));return FALSE;}//设置协作等级,为窗口模式hRet = m_pDDraw->SetCooperativeLevel(this->GetSafeHwnd(),DDSCL_NORMAL);if ( hRet != DD_OK ){AfxMessageBox(_T("设置窗口模式失败"));return FALSE;}CRect rt;GetClientRect(&rt);//设置显示模式hRet = m_pDDraw->SetDisplayMode(rt.Width(),rt.Height(),32,0,0);if ( hRet != DD_OK ){AfxMessageBox(_T("设置窗口显示模式失败"));return FALSE;}//创建表面结构体DDSURFACEDESC2 ddsd;ZeroMemory(&ddsd, sizeof(ddsd));ddsd.dwSize = sizeof(ddsd);ddsd.dwFlags = DDSD_CAPS ;//表面有DirectDraw表面功能,ddsCaps成员有效ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;if(FAILED(hRet = m_pDDraw->CreateSurface(&ddsd,&m_pddsPrimary,NULL))){AfxMessageBox(_T("创建主表面失败"));return FALSE;}memset(&ddsd, 0, sizeof(ddsd));ddsd.dwSize = sizeof(ddsd);ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN;ddsd.dwWidth = 480;ddsd.dwHeight = 320;if (FAILED(m_pDDraw->CreateSurface(&ddsd,&m_pddsOffscreen,NULL))){AfxMessageBox(_T("创建离屏表面失败"));return FALSE;}//创建裁剪器if(FAILED(m_pDDraw->CreateClipper(0,&m_lpPalette,NULL))){AfxMessageBox(_T("创建裁剪器失败"));return FALSE;}if(FAILED(m_lpPalette->SetHWnd(0,this->m_hWnd))){AfxMessageBox(_T("创建裁剪器失败"));return FALSE;}if (FAILED(m_pddsPrimary->SetClipper(m_lpPalette))){AfxMessageBox(_T("创建裁剪器失败"));return FALSE;}


0 0