- •1. Тема: “ Контекстно –независимый вывод текстовой информации”
- •1. 1 Цель
- •1. 2. Методические указания для подготовки к работе
- •Другой способ получения описателя контекста устройства - в теле обработчика сообщения , отличного от wm_paint:
- •Основные понятия о шрифтах
- •Структура logfont и параметры шрифтов
- •Пример создания и использования шрифтов
- •1. 4 Общие требования и варианты заданий
- •4.3. Краткие теоретические сведения
Другой способ получения описателя контекста устройства - в теле обработчика сообщения , отличного от wm_paint:
hdc = GetDC (hwnd);
{другие строки программы}
ReleaseDC (hwnd, hdc);
Основная разница между использованием этих функций от предыдущей пары системных функций состоит в том, что рисовать можно в пределах всей рабочей области окна, а не только в пределах недействительного прямоугольника. Функция GetDC не делает действительными какие-либо недействительные зоны.
Как правило, вызовы функций GetDC и ReleaseDC использутся для программирования обновления рабочей области непосредственно в ответ на ввод сообщений с клавиатуры ( например, в программах текстовых редакторов) или на ввод сообщений при помощи манипулятора мышь (например, графических редакторах). При этом часть окна, предназначенная для выдачи сообщений WM_PAINT, специально делается недействительной.
Порядок создания контекста графического устройства и вывода информации
Недействительный прямоугольник
При перекрытии части окна другим окном она становится недействительной, т.е. требует перерисовки (восстановления). Это происходит:
после того, как окно было невидимым, а затем стало видимым;
при изменении размера окна;
при прокрутке части рабочей области;
при выводе. а затем удалении диалогового окна или окна сообщения;
при раскрытии пункта горизонтального меню, а затем его удалении.
В этом случае Windows ставит в очередь синхронное сообщение WM_PAINT, рассчитывая при этом недействительный регион. Если за время ожидания в очереди и другая часть окна становится недействительной, то другое сообщение WM_PAINT не посылается, а рассчитлученный нами предыдущей функцией, позволяет вместо указания координат указать прямоугольник вывода;
последний параметр (iFormat) – 32-битная переменная, определяющая формат вывода текста; если - 0, то Windows реагирует на символы возврата каретки ('\r' или 0х0D) и конца строки ('\n' или 0х0A) как на сигнал начала новой строки. Любой текст, в том числе и части букв, которые при отображении попадают правее или ниже границ прямоугольника, отсекаются.
Этот параметр можно задавать и как комбинацию одного или нескольких следующих флагов:
Положение по горизонтали:
DT_LEFT - выравнивание влево (по умолчанию);
DT_RIGHT - выравнивание вправо;
DT_CENTER - выравнивание по центру;
DT_SINGLELINE - задает интерпретацию символов конца каретки конца строки, как отображаемых символов; данный флаг используется вместе с флагами, указанными ниже;
Положение строки:
DT_TOP - вверху прямоугольника;
DT_BOTTOM - внизу прямоугольника;
DT_VCENTER - посередине прямоугольника между верхней и нижней границами;
DT_WORDBREAK -задает обрыв строки в конце слов, если она шире прямоугольника;
DT_NOCLIP - отменяет отсечение текста, выходящего за пределы прямоугольника.
Вывод текста на экране в виде столбцов можно реализовать с помощью функции
TabbedTextOut ( hdc, x, y, psString, iCount, iNumTabs, piTabStops, xTabOrigin);
Данная функция будет заменять символы табуляции ('\t' или 0х09), встречающиеся в выводимой строке, числом пробелов в соответствии с параметрами, передаваемыми этой функции:
iNumTabs - число позиций табуляции, если =0, тотабуляция устанавливается через равные промежутки (восьмикратная средняя ширина символа);
piTabStops - массив позиций табуляции (в пикселях);
xTabOrigin - логическая координата по горизонтали точки отсчета табуляции, может совпадать сначальной позицией строки или отличаться от нее.
Другая расширенная функция вывода текста - это функция:
ExtTextOut ( hdc, x , y, iOptions, &rect, psString, iCount, pxDistance);
&rect -задает прямоугольник отсечения, если iOptions имеет значение ETO_CLIPPED или прямоугольник закрашивания текущим фоном, если iOptions имеет значение ETO_OPAQUE.
pxDistance - представляет собой массив целых чисел, задающих интервалы между соседними символами строки.
Цвет шрифта выводимого текста можно задать с помощью функции
SetTextColor (hdc, rgbColor);
где rgbColor - задает цвет шрифта, например с помощью 16-ричной константы 0x00NNNNNN или какой-либо функции (GetSysColor- установка текущих системных цветов.
Цвет фона для выводимого текста можно задать вызовом функции
SetBkColor(hdc, rgbColor) .
