Заключение



В этой главе я упоминал о том, что загрузить растровое изображение на поверхность можно и другим, более простым способом. Вспомните — в интерфейс 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.bnHeight; DDSURFACEDESC desc; desc.dwSize = sizeof(desc); desc.dwFlags = DDSD+HEIGHT |DDSC_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 позволяет с максимальной эффективностью получать данные от таких устройств, как клавиатура или мышь.
Следующая глава

С. Трухильо. Графика для Windows, б-ка программиста www.piter.com prog.dax.ru


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