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

 

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

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

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

MemDC.PatBlt (0, 0, 32, 32, WHITENESS);
// рисование круга:
MemDC.Ellipse (2, 2, 30, 30);
В этом примере предполагается, что растровому изображению при вызове функции CreateCompatibleBitmap был задан размер 32x32 пикселя.
Приведенный ниже фрагмент программы иллюстрирует все шаги, описанные в этом параграфе. Он инициализирует растровое изображение, а затем воспроизводит внутри него рисунок.
class CProgView : public CView //класс представления программы (
// ...
CBitmap m_Bitmap;
void DrawBitmapImage 0; // ... };
// . . .
void CProgView::DrawBitmapImage () (
CClientDC ClientDC (this); // объект контекста устройства
// окна представления; CDC MemDC; // объект памяти контекста устройства
// инициализация пустого растрового изображения: m_Bitmap.CreateCompatibleBitmap (SClientDC, 32, 32);
// инициализация объекта памяти контекста устройства (КУ) MemDC.CreateCompatibleDC (SClientDC);
// передача объекта растрового изображения в объект КУ памяти: MemDC.SelectObject (&m_Bitmap) ;
// использование функции класса CDC для рисования внутри // растрового изображения:
// рисование белого фона:
MemDC.PatBlt (С, 0, 32, 32, WHITENESS);
// рисование круга:
MemDC.Ellipse (2, 2, 30, 30);
// вызов других функций рисования ...
)
Примечание
Обычно объект растрового изображения объявляется как переменная одного из классов основной программы (например, класса представления) и, следовательно, обрабатывается на протяжении всей программы. Однако если объект растрового изображения удаляется перед удалением объекта памяти контекста устройства, его необходимо сначала удалить из объекта памяти контекста устройства. Как это сделать для инструментов рисования, описано в гл. 19. А именно: при вызове функции SelectObject указатель возвращается на стандартное растровое изображение, которое для вновь созданного объекта памяти контекста устройства является монохромным изображением, содержащим один пиксель. По окончании работы с растровым изображением снова вызывается функция SelectObject, возвращающая его в объект контекста устройства.
Отображение растрового изображения
После создания и инициализации объекта растрового изображения с использованием одного из двух рассмотренных методов можно отобразить его прямо внутри окна или другого устройства. Средства Win32 API и библиотека MFC не содержат функцию, которую можно вызвать для простого отображения растрового изображения на устройстве. Поэтому напишем свою собственную функцию. Например:
void DisplayBitmap (CDC *PDC, CBitmap *PBitmap, int X, int Y) !
BITMAP BM; CDC MemDC;
MemDC.CreateCompatibleDC (NULL); MemDC.SelectObj ect (PBitmap); PBitmap->GetObject (sizeof (BM), &BM); PDC->BitBlt
(X, // логическая горизонтальная координата
// приемника ;
Y, // логическая вертикальная координата
// приемника ;
BM.bmWidth, // ширина перемещаемого блока
// (в логических единицах);
BM.bmHeight, // высота перемещаемого блока
// (в логических единицах);
SMemDC, // КУ источника для графических данных;
o, // логическая горизонтальная координата
// блока внутри источника;
0, // логическая вертикальная координата
// блока внутри источника;
SRCCOPY); // код типа перемещения
Функция DisplayBitmap отображает растровое изображение на устройстве, соответствующем объекту контекста устройства, передаваемому в первом параметре. Второй параметр содержит адрес объекта растрового изображения, который необходимо инициализировать, используя один из описанных ниже способов, совместимых с экраном. Последние два параметра описывают горизонтальную и вертикальную координаты позиции внутри целевого устройства, в левом верхнем углу которого должно размещаться растровое изображение.
Сначала функция DisplayBitmap создает объект контекста устройства, совместимый с экраном, и передает растровое изображение внутрь этого объекта, поэтому он может иметь доступ к содержимому растрового изображения. Затем она вызывает функцию Getobject класса CGdiObject, заполняющую элементы структуры BITMAP информацией растрового изображения. Функция DisplayBitmap получает размер растрового изображения из переменных bmWidth и bmHeight этой структуры. Затем она вызывает функцию BitBlt класса CDC, перемещающую графические данные, содержащиеся в растровом изображении, прямо на целевое устройство.
Первые два параметра, передаваемые в функцию BitBlt, задают левый верхний угол размещения приемника, третий и четвертый — ширину и высоту
перемещаемого блока данных. Функция DisplayBitmap перемещает все растровое изображение, передавая его ширину и высоту, полученные из переменных bmWidth и bmHeight структуры bitmap. Пятый параметр SMemDC — это адрес объекта контекста устройства, являющегося источником графических данных; функция DisplayBitmap описывает объект памяти контекста устройства, связанного с растровым изображением. Шестой и седьмой параметры соответствуют левому верхнему углу блока графических данных, перемещаемых из объекта контекста устройства источника. Поскольку функция DisplayBitmap перемещает растровое изображение целиком, она задает координаты (0, 0). Последний параметр — это код, который указывает, как должны быть перемещены графические данные. Значение srccopy показывает, что они должны быть скопированы без изменений. Функция BitBlt — одна из функций битовых операций, описанных в следующем параграфе.
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100