Графика для Windows средствами DirectDraw



Инициализация - часть 4


Функция OnSize() вызывается при изменении размеров окна приложения. Создавая вторичный буфер по размерам клиентской области окна, мы экономим память. Функция OnSize() выглядит так:


void DirectDrawWin::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy);

CFrameWnd::GetClientRect( &clientrect ); CFrameWnd::ClientToScreen( &clientrect );

if (videobacksurf) return;

DDSURFACEDESC desc; ZeroMemory( &desc, sizeof(desc) ); desc.dwSize = sizeof(desc); desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS; desc.dwWidth = clientrect.Width(); desc.dwHeight = clientrect.Height(); desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; if (backsurf) backsurf->Release(), backsurf=0;

HRESULT r=ddraw2->CreateSurface( &desc, &backsurf, 0 ); if (r!=DD_OK) { TRACE("failed to create 'backsurf'\n"); return; } else TRACE("backsurf w=%d h=%d\n", clientrect.Width(), clientrect.Height() );

}


Инициализация приложения завершается вызовом функций StorePixelFormatData() и CreateCustomSurfaces(), происходящим в обработчике OnCreate(). Обе функции ведут себя точно так же, как и в полноэкранном приложении.




Содержание  Назад  Вперед