русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Отображение точки

Для отображения одного пиксела можно воспользоваться функцией GDI SetPixel:

rgbTrueColor = SetPixel (hDC, x, y, rgbColor);

Первый параметр данной функции содержит индекс контекста устройства. Второй и третий параметры определяют координаты пиксела (в логических координатах). Четвертый параметр задает RGB-цвет отображаемого пиксела, эту величину можно получить при помощи макроопределения RGB:

rgbColor = RGB (byRed, byGreen, byBlue);

Заметим, что так как устройства отображения поддерживают ограниченное число цветов, то функция SetPixel отображает точку цветом, наиболее близким к rgbColor, который поддерживается устройством отображения. При этом функция SetPixel возвращает величину RGB-цвета, которым в действительности отображается точка.

Приложение может определить цвет точки с данными координатами. Для этого используют функцию GetPixel:

rgbPixelColor = GetPixel (hDC,x,y);

Первый параметр функции определяет индекс контекста устройства, а второй и третий – координаты пиксела.

Для изменения начальной позиции пера используют функцию MoveTo:

MoveTo (hDC,x,y);

Координаты текущей позиции пера, определенные в контексте устройства, можно получить при помощи функции GetCurrentPosition:

DWORD dwPoint;

dwPoint = GetCurrentPosition (hDC);

При этом в младшем слове переменной dwPoint содержится x-координата, а в старшем слове – y- координата текущей позиции пера.

Таким образом, для рисования прямой линии из точки с координатами (xBegin, yBegin) в точку с координатами (xEnd, yEnd) функции MoveTo и LineTo нужно использовать вместе:

MoveTo (hDC, xBegin, yBegin);

LineTo (hDC,xEnd, yEnd);

Для отрисовки ломаной линии следует использовать функцию PolyLine:

PolyLine (hDC, &ptArray, number);

Первый параметр функции содержит индекс контекста устройства, второй – адрес массива точек, которые будут поочередно соединены отрезками прямых, а третий – число определенных в массиве точек.

Результат работы функции PolyLine аналогичен одному вызову функции MoveTo (для первого элемента массива ptArray) и последующим number-1 вызовам функции LineTo (для остальных элементов массива ptArray), за исключением того, что функция PolyLine не меняет текущую позицию пера и выполняется быстрее. Текущую позицию пера изменяют только функции MoveTo и LineTo.

Последняя рассматриваемая GDI функция, отображающая линию – это функция Arc:

Arc (hDC, xLeft, yTop, xRight, yButtom, xBegin, yBegin, xEnd, yEnd);

Эта функция рисует дугу эллипса. Эллипс задается прямоугольником, в который он вписан. Прямоугольник определяется верхним левым (xLeft, yTop) и правым нижним (xRight, yButtom) углами. Дуга строится против часовой стрелки от точки пересечения эллипса с прямой, соединяющей центр эллипса с точкой (xBegin, yBegin), до точки пересечения эллипса с прямой, соединяющей центр эллипса с точкой (xEnd, yEnd):

 
 


xLeft xEnd xRight

yEnd

yTop

xBegin

yBegin

yBottom

Рис. Отрисовка дуги эллипса

Для функций, отображающих линии, Windows использует перо, выбранное в данный момент в контексте отображения. Перо может иметь различный цвет, ширину, структуру. По умолчанию в контексте устройства установлено перо, рисующее тонкие сплошные линии черного цвета (оно называется BLACK_PEN). Кроме того существует еще два стандартных пера – WHITE_PEN и NULL_PEN. Перо WHITE_PEN рисует тонкие сплошные белые линии, а перо NULL_PEN при его использовании ничего не изменяет на рисунке.

Если вы хотите изменить перо, используемое в контексте устройства, на другое стандартное перо (WHITE_PEN или NULL_PEN), то надо сначала получить индекс стандартного пера, вызвав функцию GetStockObject:

HPEN hPen; //Дескриптор пера

int nPenIdent; //Тип пера

nPenIdent = NULL_PEN; //Получаем дескриптор пера NULL_PEN

hPen = GetStockObject (nPenIdent); //Дескриптор пера помещается

// переменную hPen

После получения индекса пера его можно выбрать в контекст устройства при помощи функции SelectObject:

HDC hDC; //Контекст устройства

HPEN hOldPen; //Индекс старого пера

hOldPen = SelectObject (hDc, hPen); //Изменяем перо, определенное

//в контексте устройства

Первый параметр функции SelectObject содержит индекс контекста устройства, перо которого вы хотите изменить, а второй содержит индекс нового пера. Функция SelectObject возвращает индекс пера, которое ранее было выбрано в контексте отображения (hOldPen). Вызвав еще раз функцию SelectObject с параметром, равным hOldPen, можно восстановить старую кисть.

В некоторых случаях недостаточно белого и черного пера. Вам может понадобиться, например, перо зеленого цвета, которое рисует штрихпунктирные линии. Для этого необходимо создать собственное перо. Для создания собственного пера (являющегося GDI объектом) можно воспользоваться функциями CreatePen или CreatePenIndirect. Данные функции возвращают дескриптор логического пера, которое может быть выбрано в контексте устройства при помощи функции SelectObject так же, как и в случае предопределенного пера.

Рассмотрим функцию CreatePen. При помощи этой функции можно создать перо заданного вами цвета, ширины, а также типа (сплошное, штрихпунктирное и т.д.).

hPen = CreatePen (hPenStyle, nWidth, rgbColor);

Первый параметр функции – hPenStyle – определяет тип рисуемой кистью линии и может быть одной из следующих величин:

Флаг hPenStyle Тип линии

PS_SOLID

PS_DASH

PS_DOT . . . . . . . . . . . .

PS_DASHDOT _ . _ . _ . _ . _

PS_DASHDOTDOT _ . . _ . . _ . . _

PS_NULL

Рис. Флаги типов линий

Второй параметр nWidth – задает ширину линий, рисуемых данной кистью, в логических единицах. Этот параметр должен быть равен единице для перьев PS_DASH, PS_DOT, PS_DASHDOT и PS_DASHDOTDOT, в противном случае перо будет рисовать сплошные линии.

Последний параметр, rgbColor, определяет RGB-цвет создаваемой кисти.

Приведем пример создания кисти, рисующей штриховую линию зеленого цвета:

HPEN OldPen, hDashGreenPen;

hDashGreenPen = CreatePen (PS_DASH, 1, RGB (0,255, 0));

OldPen = SelectObject (hDashGreenPen);

Создаваемые кисти и перья являются объектами GDI, при работе с которыми нужно придерживаться определенных правил. Перечислим эти правила:

· Нужно обязательно удалять все объекты GDI, которые вы создаете – Windows не очищает их автоматически.

· Нельзя удалять объекты GDI, пока они выбраны в контексте устройства.

· Нельзя удалять стандартные объекты Windows.

Логические перья, создаваемые функциями CreatePen и CreatePenIndirect, также являются GDI объектами, следовательно, после их использования они должны быть удалены. Для этого применяют функцию DeleteObject:

DeleteObject (hDashGreenPen);

Единственный параметр функции содержит индекс удаляемого логического объекта, в данном случае индекс кисти – hDashGreenPen.

Наиболее удобно создавать логические перья при обработке сообщения WM_CREATE, а удалять их при обработке сообщения WM_DESTROY.

Просмотров: 513


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.