/*****************************Private*Routine******************************\ * OnSetDDrawDevice * \**************************************************************************/ HRESULT CMpegMovie::OnSetDDrawDevice( LPDIRECTDRAW7 pDD, HMONITOR hMon ) { HRESULT hr = S_OK; RELEASE(m_pddsRenderT); RELEASE(m_pddsPriText); RELEASE(m_pddsPrimary); __try { DDSURFACEDESC2 ddsd; // A surface description structure INITDDSTRUCT(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; CHECK_HR(hr = pDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST | DDENUMSURFACES_ALL, &ddsd, &m_pddsPrimary, DDSurfEnumFunc)); if(!m_pddsPrimary) { hr = E_FAIL; __leave; } MONITORINFOEX miInfoEx; miInfoEx.cbSize = sizeof(miInfoEx); GetMonitorInfo(hMon, &miInfoEx); INITDDSTRUCT(ddsd); ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = (miInfoEx.rcMonitor.right - miInfoEx.rcMonitor.left); ddsd.dwHeight = (miInfoEx.rcMonitor.bottom - miInfoEx.rcMonitor.top); CHECK_HR(hr = pDD->CreateSurface(&ddsd, &m_pddsPriText, NULL)); CHECK_HR(hr = pDD->CreateSurface(&ddsd, &m_pddsRenderT, NULL)); } __finally { if(FAILED(hr)) { RELEASE(m_pddsRenderT); RELEASE(m_pddsPriText); RELEASE(m_pddsPrimary); } } return hr; }