Контекст устройства. Работа с текстом. Диалоговое окно выбора цвета. Настройка режима отображения. Точечный рисунок. Класс CBitmap, страница 5

CColorDialog ( COLORREF clrlnit = DWORD , dwFlags = 0 , CWnd* pParentWnd = NULL ) ;

Параметры:

clrlnit                   первоначально выбранный цвет (по умолчанию – черный);

dwFlags                комбинация флагов, позволяющих, например, отобразить панель выбора дополнительных цветов или запретить ее использование;

pParentWnd        указатель на родительское окно.

Отображение диалогового окна. Функция DoModal

Функция DoModal, определённая в классе CColorDialog, создает и отображает диалоговое окно выбора цвета.

Синтаксис:

virtual int DoModal ( ) ;

Возвращаемое значение: IDOK или IDCANCEL – это константы, которые указывают, выбрал ли пользователь кнопку OK или Отмена.

Получение выбранного цвета. Функция GetColor

Получить выбранный пользователем цвет можно с помощью функции GetColor, определённой в классе CСolorDialog. Прототип этой функции имеет следующий вид:

COLORREF GetColor ( ) const ;

Функция возвращает выбранный пользователем цвет.

Получение дополнительных цветов. Функция GetSavedCustomColors

Диалоговое окно Выбора цвета позволяет кроме основного цвета позволяет определить до 16 дополнительных значений цвета с помощью функции GetSavedCustomColors, протопит которой, имеет вид:

Синтаксис:

static COLORREF*  GetSavedCustomColors () ;

Возвращаемое значение: указатель на массив из 16 RGB-цветов.

Изначально каждый из элементов массива инициируется белым цветом.

Пример использования диалогового окно выбора цвета

Ниже приведён код обработки события щелчка на кнопке IDC_COLOR в классе CcolDlg.

void CColDlg::OnColor()

{

// создание экземпляра класса окна выбора цвета; цвет по умолчанию - красный

         CColorDialog dlg( 0x000000FF ) ;

// вывод на экран окна выбора цвета

         if ( dlg.DoModal() == IDOK )           // если при закрытии окна пользователь нажал кнопку ОК

         {

                   CString str ;                            // текст сообщения

                   COLORREF color ;                // выбранный цвет

                   BYTE red , green , blue ;        // составляющие цвета

                   color = dlg.GetColor ();           // получение цвета, выбранного пользователем

                   red    = GetRValue ( color ) ;  // определение красной составляющей цвета

                   green = GetGValue ( color ) ;  // определение зелёной составляющей цвета

                   blue   = GetBValue ( color ) ;  // определение синей составляющей цвета

// Формирование строки текста сообщения, цвета выводятся в виде шестнадцатеричных чисел

                   str.Format ( "Выбран цвет 0x%08X, содержащий:\n"

                            "\t0x%02X - красного\n"

                            "\t0x%02X - зеленого\n"

                            "\t0x%02X - синего", color , red , green , blue ) ;

// вывод окна сообщений

                   MessageBox ( str , "Выбран цвет" ) ;

         }

В результате работы этого фрагмента кода на экран будет выведено следующее окно сообщений.

модель перьевого плоттера

Большинство графических систем первого поколения были двухмерными. В них использовалась концепция модели перьевого плоттера. Такое устройство формирует изображение на бумаге за счет перемещения пера, закрепленного на двух подвижных направляющих. Одна направляющая перемещается в продольном направлении (вдоль оси у), а другая — в поперечном (вдоль оси х). Специальный механизм поднимает и опускает перо. В опущенном состоянии перо при перемещении оставляет след на бумаге — этот след и формирует изображение. В современных пакетах используется та же самая идея формирования на носителе следа подвижного пера, т.е. фактически воспроизведения процесса ручного вычерчивания с помощью карандаша. Пользователь при этом имеет дело с участком плоскости, ограниченным размерами планшета.

Поведение такой графической системы описывается двумя основными графическими функциями: MoveTo и LineTo.

При выполнении функции MoveTo перо приподымается и затем перемещается в точку с координатами (х, у), не оставляя следа на носителе. При выполнении функции LineTo перо опускается и затем перемещается по прямой из текущего положения в точку с заданными координатами (х, у), оставляя след на носителе. Если добавить к этим функциям еще и функции настройки (выбор пера подходящего цвета и толщины), то получим законченную двухмерную графическую систему. Ниже приведены прототипы этих функций.