Функции для работы с объектами отсечения
DirectDraw позволяет присоединить к поверхности экземпляр интерфейса DirectDrawClipper(который мы еще не рассматривали). После того как такое присоединение состоится, операция блиттинга на данную поверхность будет регулироваться объектом отсечения. Для работы с объектами отсечения в интерфейсе DirectDrawSurfaceимеются две функции:
• GetClipper()
• SetClipper()
Функция SetClipper()присоединяет объект отсечения к поверхности. Функция GetClipper()возвращает указатель на присоединенный ранее объект отсечения. С помощью функции SetClipper()можно разорвать связь между поверхностью и объектом отсечения, для этого в качестве указателя на интерфейс DirectDrawClipperследует задать NULL.
Функции палитры
Палитры, как и объекты отсечения, можно присоединять к поверхностям. Для этой цели в интерфейсе DirectDrawSurfaceпредусмотрены две функции:
• GetPalette()
• SetPalette()
Функция SetPalette()присоединяет к поверхности экземпляр интерфейса DirectDrawPalette(о нем речь пойдет ниже). Функция GetPalette()применяется для получения указателя на палитру, присоединенную ранее.
Палитру можно присоединить к любой поверхности, однако действовать она будет лишь в том случае, если поверхность является первичной. Палитра, присоединенная к первичной поверхности, управляет палитрой видеокарты.
Интерфейс DirectDrawPalette
Интерфейс DirectDrawPaletteпредназначен для работы с палитровыми видеорежимами и поверхностями. Несмотря на то что в Windows поддерживается ряд видеорежимов с глубиной пикселей менее 8 бит, DirectDraw поддерживает лишь 8-битные палитровые режимы.
Экземпляры интерфейса DirectDrawPaletteсоздаются функцией CreatePalette()интерфейса DirectDraw. Функция CreatePalette()получает набор флагов, определяющих тип палитры.
Интерфейс DirectDrawPalette содержит всего три функции:
• GetCaps()
• GetEntries()
• SetEntries()
Функция GetCaps()определяет возможности палитры. В числе получаемых сведений — количество элементов палитры, поддержка палитрой вертикальной синхронизации и (в случае 8-битной палитры) возможность заполнения всех 256 элементов.
Для заполнения палитры используется функция SetEntries(). Содержимое палитры чаще всего берется из файла. Тем не менее значения элементов палитры можно рассчитать и занести в палитру во время выполнения программы. Функция GetEntries()возвращает значения элементов, ранее занесенных в палитру.
Экземпляры интерфейса DirectDrawPaletteприсоединяются к поверхности функцией SetPalette()интерфейса DirectDrawSurface. Палитровая анимация выполняется либо присоединением разных палитр к первичной поверхности, либо изменением содержимого палитры функцией SetEntries().
Интерфейс DirectDrawClipper
Интерфейс DirectDrawClipperпредназначен для поддержки отсечения. Чтобы выполнить отсечение, следует присоединить объект отсечения к поверхности и использовать ее в качестве приемника блиттинга.
Экземпляры интерфейса DirectDrawClipperсоздаются функцией CreateClipper()интерфейса DirectDraw. Интерфейс DirectDrawClipperсодержит следующие функции:
• SetHWnd()
• GetHWnd()
• IsClipListChanged()
• SetClipList()
• GetClipList()
Объекты отсечения обычно используются для ограничения вывода, необходимого при работе приложений DirectDraw в окне. Объект отсечения гарантирует, что при выполнении блиттинга будет учитываться присутствие на рабочем столе других окон. Например, если окно приложения будет полностью или частично закрыто другим окном, объект отсечения позаботится о том, чтобы содержимое верхнего окна не было испорчено приложением DirectDraw.
Отсечение для рабочего стола активизируется функцией SetHWnd(). Функция SetHWnd()присоединяет объект отсечения к логическому номеру (handle) окна. В результате инициируется взаимодействие Windows с объектом отсечения. Объект отсечения получает уведомления обо всех изменениях окон на рабочем столе и действует соответствующим образом. Функция GetHWnd()определяет, к какому логическому номеру окна присоединен заданный объект отсечения (и присоединен ли он вообще). Функция IsClipListChanged()определяет, был ли внутренний список отсечений изменен вследствие изменений на рабочем столе.
Читать дальше