Окт 13

Режим смешивания фона и цвет фона графического элемента

Некоторые графические примитивы GDI содержат пикселы двух видов: основные (foreground) и фоновые (background). Например, при выводе текстового символа пикселы, образующие глиф1 символа, считаются основными, а остальные пикселы из прямоугольной области вокруг символа2 считаются фоновыми. При выводе пунктирных линий пикселы отрезков считаются основными, а пикселы промежутков — фоновыми. Для шаблона штриховой кисти штриховые линии рисуются основными пикселами, а промежутки между линиями — фоновыми пикселами.
Фоном графического элемента будем в дальнейшем считать совокупность его фоновых пикселов. Цвет фона графических элементов (background color) является атрибутом контекста устройства, который можно устанавливать с помощью функции SetBkColor.
По умолчанию этот атрибут имеет значение белого цвета. Но не следует путать понятие цвета фона графических элементов, который относится к контексту устройства, с понятием цвета фона окна, который является атрибутом класса окна. Чаще всего фон класса окна также имеет белый цвет. Именно поэтому при выводе текста в программе Hello 1 нельзя было заметить цвет фона для букв текста. Он просто слился с фоном окна.
Если основные пикселы графического элемента выводятся всегда, то вывод фоновых пикселов зависит от еще одного атрибута контекста устройства, который называется режимом смешивания фона (background mix mode)3.
По умолчанию режим смешивания фона имеет значение OPAQUE4. Этот режим указывает, что Windows выводит фон графического элемента (цветом background color) поверх фона окна. Разработчик может изменить режим смешивания фона, запретив отображение фона графических элементов. Для этого нужно вызвать функцию SetBkMode, передав ей в качестве второго параметра константу TRANSPARENT5.
Чтобы узнать, какой режим смешивания фона является текущим, следует вызвать функцию GetBkMode.