Наш интенсивный краткий курс DirectDraw
Наш интенсивный краткий курс DirectDraw подходит к концу. В главе 2 мы поговорим о проектировании и оптимизации приложений, а также о том, что ждет DirectDraw в ближайшем будущем.
Следующая глава
С. Трухильо. Графика для Windows, б-ка программистаwww.piter.comprog.dax.ru
Пора браться за программирование. В главе 3 мы подробно рассмотрим полноценную программу, а заодно познакомимся с важнейшими приемами программирования для DirectDraw.
Следующая глава
С. Трухильо. Графика для Windows, б-ка программистаwww.piter.comprog.dax.ru
В этой главе мы изучили почти весь код, сгенерированный AppWizard. Рассмотренное нами базовое приложение нетрудно изменить, поэтому попробуйте немного поэкспериментировать. Например, попытайтесь добавить в программу Bounce дополнительные поверхности или замените вызовы BltSurface() на BltFast() и посмотрите, что получится.
В оставшейся части книги речь в основном пойдет о том, какие изменения следует внести в базовый код, чтобы добиться конкретного результата. В главе 4 мы напишем программу, которая в полной мере использует возможности DirectDraw по переключению видеорежимов.
Следующая глава
С. Трухильо. Графика для Windows, б-ка программистаwww.piter.comprog.dax.ru
В этой главе мы рассмотрели две демонстрационные программы и воспользовались такими возможностями DirectDraw, как переключение видеорежимов и частот смены кадров, а также применили цветовые ключи. Для переключения видеорежимов и частот использовалась функция EnumDisplayModes() интерфейса DirectDraw в сочетании с функцией SetDisplayMode(), а для работы с цветовыми ключами — функции SetColorKey() и BltFast() интерфейса DirectDrawSurface. Вывод текста в программах осуществлялся с помощью функции GetDC() интерфейса DirectDrawSurface и текстовых функций Win32.
В главе 5 мы научимся работать с поверхностями на уровне отдельных битов, что позволит установить максимальный контроль над содержимым палитровых и беспалитровых поверхностей. Затем полученные знания будут использованы для написания программы просмотра BMP-файлов.
Следующая глава
С. Трухильо. Графика для Windows, б-ка программистаwww.piter.comprog.dax.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.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 позволяет с максимальной эффективностью получать данные от таких устройств, как клавиатура или мышь.
Следующая глава