Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodich_ukaz_k_prakt_SPO_5_semestr.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
715 Кб
Скачать
☆

Другой способ получения описателя контекста устройства - в теле обработчика сообщения , отличного от 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) .