| netlib.narod.ru | < Назад | Оглавление | Далее > |
В этой главе я упоминал о том, что загрузить растровое изображение на поверхность можно и другим, более простым способом. Вспомните — в интерфейс DirectDrawSurface входит функция GetDC(), которая позволяет работать с поверхностями с помощью обычных функций Win32. Реализующая этот подход функция может выглядеть так:
BOOL CopyBmp (LPDIRECTDRAWSURFACE surface, HBITMAP bmp,
int x, int y)
{
if (bmp == 0)
{
TRACE("no bmp specified\n");
return FALSE;
}
if (surface == 0)
{
TRACE("no surface specified\n");
return FALSE;
}
HDC imageDC = CreateCompatibleDC(0);
SelectObject(imageDC, bmp);
BITMAP bitmap;
GetObject(bmp, sizeof(bitmap), &bitmap);
int w = bitmap.bmWidth;
int h = bitmap.bmHeight;
DDSURFACEDESC desc;
desc.dwSize = sizeof(desc);
desc.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;
surface->GetSurfaceDesc(&desc);
HDC dc;
HRESULT result;
if ((result = surface->GetDC(&dc)) == DD_OK))
{
Stretchblt(dc, 0, 0, desc.dwWidth, desc.dwHeight, imageDC,
x, y, w, h, SRCCOPY);
surface->ReleaseDC(dc);
}
DeleteDC (imageDC);
return result == DD_OK;
}
Эта функция не имеет никакого отношения к программе этой главы, ее даже нет на CD-ROM. Она приведена с единственной целью — показать, что с помощью функции GetDC() интерфейса DirectDrawSurface и функции Win32 наподобие StretchBlt() можно легко скопировать растровое изображение Windows на поверхность. Разумеется, в этом случае приходится жертвовать скоростью, поскольку механизм GDI не отличается особым быстродействием, а его функции не поддаются оптимизации.
Не будем отклоняться от основной темы этой главы — прямого доступа к поверхностям. Загрузка растров на поверхности была всего лишь упражнением. Теперь, когда вы все знаете о блокировке поверхностей и форматах пикселей, вы сможете самостоятельно реализовать алгоритмы рисования линий, эффекты растрирования (dithering) и даже спрайты. Кроме того, можно включить в программу поддержку других файловых форматов.
В главе 6 мы узнаем, как наделить приложение поддержкой DirectInput. Обходя традиционные механизмы ввода Windows, DirectInput позволяет с максимальной эффективностью получать данные от таких устройств, как клавиатура или мышь.
| netlib.narod.ru | < Назад | Оглавление | Далее > |