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 | < Назад | Оглавление | Далее > |