Программирование на Visual C++. Архив рассылки
Шрифт:
Надеюсь, что написание плагинов для самого популярного в мире браузера не показалось вам трудным. Если так, то у вас наверняка появилось желание поэкспериментировать с компонентами, расширяющими функциональность браузера. В этом случае я могу считать, что цель, к которой я стремился при написании этой статьи, достигнута.
ЭКЗАМЕН
How do you create an edit control that echoes '#' for any character the user types?
1. Super-class the edit control, override the WM_CHAR message, and also override the WM_PAINT message to echo the '#' char.
2. Send the edit control a WM_PASSWORD message and then send a WM_SETPASSWORDHAR message to specify the '#' char.
3. Send the edit control an EM_PASSWORD message and then send an EM_SETPASSWORDHAR message to specify the '#' char.
4. Use the ES_PASSWORD style and then send an EM_SETPASSWORDCHAR message to specify the '#' char.
5. Sub-class the edit control, override the WM_CHAR message, and also override the WM_PAINT message to echo the '#' char.
Вариант 1
Это все на сегодня. Пока!
Программирование на Visual C++
Выпуск №63 от 10 февраля 2002 г.
Здравствуйте, дорогие друзья!
СТАТЬЯ
Растровые изображения с прозрачными областями
Автор: Ron Gery
Перевод: Виталий Брусенцев
Демонстрационная программа к статье (12 кБ)
Да, эта статья написана в 1992 году, и самая свежая информация в ней относится к Windows 3.1. Но описываемые здесь алгоритмы и методы растровой графики до сих пор (за одним-двумя исключениями) работают в Windows. Также приятно, что приведенные алгоритмы описаны доходчиво и в деталях. В-общем, если Вы хотите разобраться в том, как работает прозрачность в Windows GDI – читайте эту статью!
Установив с помощью вызова функции SetBkMode режим отображения фона как TRANSPARENT, можно выводить текст с прозрачным фоном, пунктирные линии с прозрачными разрывами и кисти с прозрачными областями. К сожалению, среда Windows не предоставляет таких же простых средств для вывода прозрачных растров. (Ну хорошо, представляет, но поддерживается этот метод далеко не везде – подробнее об этом ниже, в разделе "Простая растровая прозрачность".) К счастью, можно сымитировать этот эффект, используя маскирующий растр и несколько раз вызвав функцию BitBlt с правильными параметрами растровых операций.
Что из себя представляет растр с прозрачностью? Это растровая картинка, сквозь которую видна часть фонового изображения. Простой пример этого – иконка Control Panel. [Здесь речь идет о системе Windows 3.x – прим. перев.] Эта иконка, вообще-то – прямоугольник, но когда Control Panel минимизируется, сквозь некоторые ее части просматривается рабочий стол. Говоря упрощенно, иконка – прямоугольный растр, некоторые
В этой статье для описания пикселов исходного растрового изображения используются термины "прозрачный" (transparent) и "непрозрачный" (opaque). Прозрачными будем называть пикселы, которые не влияют на конечное изображение. Непрозрачные пикселы рисуются поверх точек назначения, заменяя их собой.
Предполагается, что черный цвет кодируется значениями "0" во всех двоичных разрядах, а белый цвет – значениями "1" соответственно. Это выполняется на всех известных графических драйверах Windows, включая основанные на палитре.
Базовая описываемая операция – перенос (blting) битов изображения из источника в место назначения. Дополнительные операции переноса используют монохромную маску. Источник и приемник представляют собой хэндлы графического контекста (HDC). Они обозначаются hdcSrc и hdcDest соответственно и могут представлять как растр (в памяти), так и непосредственно графическое устройство. Маска, обозначаемая hdcMask, должна представлять собой монохромное растровое изображение, выбранное в совместимом графическом контексте.
До того, как перейти к собственно рисованию, вспомним основные понятия, используемые в растровой графике.
Последний параметр функции BitBlt указывает код растровой операции (ROP). Он определяет, какая комбинация битов источника, приемника и шаблона (текущей выбранной кисти) создаст конечную картинку. Так как растр – всего лишь набор битов, ROP можно назвать булевским уравнением над битами. В зависимости от вида графического устройства, биты растра имеют разное значение:
• Для монохромных устройств каждый бит представляет один пиксел: черный – значением 0, белый – значением 1.
• Для цветных устройств каждый пиксел описывается набором битов – либо индексом в таблице цветов (палитре), либо непосредственным значением цвета.
Вне зависимости от конкретного назначения битов, ROP просто выполняет действия над ними.
Весь фокус заключается, конечно же, в том, чтобы получить осмысленную комбинацию битов. В приложении A к Руководству программиста по Windows 3.1 SDK приведен список из 256 возможных тернарных ROP. Они предоставляют множество способов комбинировать растровые данные, и зачастую один и тот же эффект можно получить разными путями. В этой статье мы будем иметь дело лишь с четырьмя ROP.
ПРИМЕЧАНИЕ
Тернарная операция – это операция над тремя операндами. Применительно к растрам это означает взаимодействие битов источника, назначения и выбранной в контексте устройства кисти (Brush или Pattern). Список упоминаемых здесь кодов ROP вы можете найти в MSDN в разделе Platform SDK/Graphics And Multimedia Services/ Windows GDI/Painting And Drawing/Painting And Drawing Reference/Raster Operation Codes. У наиболее применимых кодов ROP существуют символические имена, определенные в заголовочном файле windows.h.