Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 90

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 173 >> Следующая

операции выражение
MERGECOPY D = Р & S Цвет каждого пикселя — результат объединения
пикселей шаблона и источника с использованием
логической операции AND
MERGEPAINT D = ~Р| S Цвет каждого пикселя — результат объединения инвертированного пикселя источника и пикселя приемника с использованием логической операции AND
NOTSRCOPY D = ~s Цвет каждого пикселя устанавливается инверсно по отношению к пикселю источника
NOTSRCERASE D = ~(D IS) Цвет каждого пикселя — результат объединения пикселей приемника и источника с использованием логического оператора AND и последующей инверсией результата
PATPAINT D D = ~S| PI Цвет каждого пикселя — результат объединения инвертированного пикселя источника, пикселя шаблона и пикселя приемника с использованием логической операции AND
SRCAND D = D & S Цвет каждого пикселя — результат объединения
пикселей приемника и источника с
использованием логической операции AND
SRCCOPY D =S Каждый пиксель устанавливается в цвет пикселя источника
SRCERASE D = ~D| s Цвет каждого пикселя — результат объединения инвертированного пикселя приемника и пикселя источника с использованием логической операции AND
Окончание табл. 20.2
Код растровой Булево операции выражение
Описание результата в области приемника
srcinvert
D = D А S
Цвет каждого пикселя — результат объединения пикселей приемника и источника с использованием логической операции ХОІІ Цвет каждого пикселя — результат объединения пикселей приемника и источника с использованием логической операции ОЯ_
srcpaint
D = D | S
Использование функции BitBit для анимации
Вы уже видели, как использовать функции BitBit в сочетании с кодом растровой операции srccopy для простого копирования блока графических данных с одного места в другое (см. функцию DisplayBitmap, описанную в параграфе "Отображение растрового изображения"). В этом параграфе вы узнаете, как использовать другие коды растровых операций для выполнения анимации.
При написании игр или приложений различных типов иногда нужно выполнить перемещение маленького рисунка. Его можно передвигать в соответствии с перемещением мыши или автоматически, используя таймер Windows. Если рисунок прямоугольный, то вызывается функция BitBit с кодом растровой операции srccopy, чтобы отобразить растровое изображение на новом месте рисунка в окне. Этот метод используется для отображения рисунка, независимо от его формы, если окно имеет стандартный цвет фона. В растровом изображении источника рисуется область вокруг рисунка с использованием цвета фона окна так, чтобы эта часть растрового изображения становилась невидимой при копировании в окно.
В общем случае вам потребуется выполнить анимацию рисунка не прямоугольной формы внутри окна, содержащего различные цвета. Например, это может быть перемещение рисунка шахматной фигуры внутри окна, содержащего шаблон шахматной доски. Проблема в том, что функция BitBit всегда перемещает прямоугольный графический блок, и пиксели, окружающие рисунок в растровом изображении источника, перезапишутся на существующие пиксели экрана. Поэтому шахматная фигура будет иметь нежелательную окружающую ее прямоугольную "ауру".
Решение этой проблемы — создание двух исходных растровых изображений: для маски и шаблона. В растровом изображении маски рисунок закрашен черным цветом, фон — белым. В растровом изображении шаблона рисунок приведен в его обычных цветах, фон закрашен черным. На рис. 20.1 показаны растровые изображения маски и куба.
Изображение маски
Изображение куба
Рис. 20.1. Растровые изображения маски и куба
Чтобы отобразить рисунок в определенном месте внутри окна, можно использовать два вызова функции BitBlt. В первом — перемещается растровое изображение маски с использованием кода растровой операции srcand, а во втором -растровое изображение шаблона с использованием кода растровой операции SRCINVERT, как в следующем примере.
void CProgView::DisplayDrawing (int X, int Y) {
CClientDC ClientDC (this); CDC MemDC;
MemDC.CreateCompatibleDC (SClientDC);
// перемещение растрового изображения маски: MemDC.SelectObject (&m_MaskBitmap);
ClientDC.BitBlt (X, Y,
BMWIDTH, BMHEIGHT, SMemDC, 0, 0, SRCAND) ;
// перемещение растрового изображения шаблона: MemDC.SelectObject (&m_ImageBitmap); ClientDC.BitBlt (X, Y,
BMWIDTH, BMHEIGHT, SMemDC, 0, 0, SRCINVERT);
}
В данном примере предполагается, что программа уже создала и инициализировала два объекта растровых изображений, совместимых с экраном: m_MaskBitmap — для маски и m_imageBitmap — для шаблона, а также определила константы BMWIDTH и BMHEIGHT, равные ширине и высоте этих растровых изображений.
Первый вызов функции BitBlt отображает рисунок в черном цвете, при этом остальные рисунки в окне остаются неизменными. Второй — перемещает раскрашенную версию рисунка в окно, опять-таки не нарушая существующее графическое изображение вокруг рисунка. Обычно результат состоит в том, что непрямоугольный рисунок отображается внутри окна и окружен первоначальным графическим изображением в окне (рис. 20.2).
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100