Перья и кисти внутри классов
Перья и кисти внутри классов
Рисование перьями и раскрашивание кистями
Перевод А. И. Легалова
Англоязычный оригинал находится на сервере компании Reliable Software
Подобно живописцу, Вы нуждаетесь в перьях и кистях, чтобы создать шедевр на вашем холсте. Когда Вы вызываете метод Canvas::Line или Canvas::Rectangle, Windows использует текущие установки пера, чтобы рисовать линии, и текущие установки кисти, чтобы заполнять охватываемые контуры.
Когда объект сопоставляется с Холстом, нельзя забывать освободить его после окончания работы. Это надо делать до тех пор, пока вы не обеспечите такой возможностью вашу программу на языке C++. Используйте только локальные объекты, чьи конструкторы присоединяют, а деструкторы (вызываемые автоматически, при выходе области действия) освобождают объекты (см. страницу «Управление ресурсами» для более детального знакомства с этой методологией). Обратите внимание, что ниже следующие объекты используют HDC (дескрипторы контекстов устройств) в качестве параметры в их конструкторах. Однако, взамен этого, Вы должны просто передать им объект Canvas. Помните, что «Холст» может автоматически приводиться к HDC.
class StockObject {
public:
StockObject(HDC hdc, int type) : _hdc(hdc) {
_hObjOld = SelectObject(_hdc, GetStockObject(type));
}
~StockObject () {
SelectObject(_hdc, _hObjOld);
}
private:
HGDIOBJ _hObjOld;
HDC _hdc;
};
Windows имеет набор предопределенных перьев и кистей. Если Вы хотите использовать их, то достаточно присоединить выбранные перья и кисти к вашему холсту не некоторое время.
class WhitePen : public StockObject {
public:
WhitePen(HDC hdc): StockObject(hdc, WHITE_PEN) {}
};
// example
void Controller::Paint(HWND hwnd) {
PaintCanvas canvas(hwnd);
WhitePen pen(canvas);
canvas.Line(0, 10, 100, 10);
// destructor of WhitePen
// destructor of PaintCanvas
}
Если ваша программа поддерживает использование несколько перьев, отсутствующих в Windows, Вы можете предварительно создать их (например, внедрив их в объект View) и использовать объект PenHolder, для временного присоединения к Холсту.
class Pen {
public:
Pen(COLORREF color) {
_hPen = CreatePen(PS_SOLID, 0, color);
}
~Pen() {
DeleteObject(_hpen);
}
operator HPEN() {
return _hPen;
}
private:
HPEN _hPen;
};
class PenHolder {
public:
PenHolder(HDC hdc, HPEN hPen) : _hdc (hdc) {
_hPenOld = (HPEN)SelectObject (_hdc, hPen);
}
~PenHolder() {
SelectObject(_hdc, _hPenOld);
}
private:
HDC _hdc;
HPEN _hPenOld;
};
class View {
public:
View() : _penGreen (RGB (0, 255, 128)) {}
void Paint(Canvas& canvas) {
PenHolder holder(canvas, _penGreen);
canvas.Line(0, 10, 100, 10);
// destructor of PenHolder
}
private:
Pen _penGreen;
};
И, наконец, если ваша программа нуждается в произвольных цветных перьях, то есть, невозможно предварительно определить всех цветов, в которых вы будете нуждаться, Вы должны использовать цветные перья. Когда Вы определяете автоматический объект ColorPen, его конструктор создает и присоединяет перо. Когда, в конце области действия, вызывается деструктор, он отсоединяет перо и удаляет его.
class ColorPen {
public:
ColorPen(HDC hdc, COLORREF color) : _hdc (hdc) {
_hPen = CreatePen(PS_SOLID, 0, color);
_hPenOld = (HPEN)SelectObject(_hdc, _hPen);
}
~ColorPen() {
SelectObject(_hdc, _hPenOld);
DeleteObject(_hPen);
}
private:
HDC _hdc;
HPEN _hPen;
HPEN _hPenOld;
};
Точно таким же способом Вы можете работать с кистями (кистей, поддерживаемых Windows, гораздо больше, чем перьев). В качестве примера, ниже дается определение ColorBrush.
class ColorBrush {
public:
ColorBrush(HDC hdc, COLORREF color) : _hdc (hdc) {
_hBrush = CreateSolidBrush(color);
_hBrushOld = (HBRUSH)SelectObject(_hdc, _hBrush);
}
~ColorBrush() {
SelectObject(_hdc, _hBrushOld);
DeleteObject(_hBrush);
}
private:
HDC _hdc;
HBRUSH _hBrush;
HBRUSH _hBrushOld;
};
Как всегда, мы пощряем Ваши собственные эксперименты.
Далее: совершенно иная тема — «Потоки».
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
5.4. Ссылки внутри фреймов
5.4. Ссылки внутри фреймов В большинстве случаев при переходе по ссылке в окне браузера текущий документ заменяется новым. При использовании фреймов схема загрузки документов отличается от стандартной. Главное отличие – возможность загружать документ в выбранный фрейм
Внутри шаблона программы
Внутри шаблона программы Чтобы выяснить, что там происходит, возьмем в качестве примера шаблон программы ОРМ, хотя он и не поддерживается на RISC-системах. Я выбрал ОРМ по двум причинам. Во-первых, это дает возможность рассмотреть еще несколько интересных концепций,
Внутри системного объекта
Внутри системного объекта Хотя в MI нет концепции памяти, все процессоры AS/400 используют физическую память, включая основную память и диск. Системные объекты, расположенные ниже MI, реализованы как строго определенные структуры, хранящиеся в этой памяти. За создание и
Внутри указателя
Внутри указателя Указатель используется в AS/400 для доступа к объектам. В этом разделе мы сосредоточимся исключительно на формате разрешенного указателя. У разрешенного указателя две функции: он описывает объект и полномочия пользователя на этот объект; а также задает
Внутри процесса ILE
Внутри процесса ILE В этом разделе мы заглянем внутрь процесса ILE. Структура процесса ILE сложна, и, подобно многим другим затронутым нами темам, ее описание насыщено таким количеством имен, сокращений и терминов, что может загнать в угол любого специалиста по компьютерам. И
Кисти
Кисти Почти все инструменты имеют такой параметр, как Кисть. Данный параметр определяет форму, размер и мягкость воздействия инструмента на изображение. Как вы могли заметить, все кисти имеют круглую форму и отличаются только диаметром и мягкостью краев. Но это не совсем
Кисти
Кисти Начнем с самого классического инструмента – Brush Tool (Кисть). Его месторасположение на панели инструментов отмечено на рис. 3.1. Рис. 3.1. На панели инструментов выбран инструмент Brush Tool (Кисть)Кисть позволяет нам непосредственно рисовать мышкой. Выделите данный
Панель Brushes (Кисти)
Панель Brushes (Кисти) Панель Brushes (Кисти) содержит в себе необходимые опции для быстрой, удобной и точной настройки штриха Кисти и остальных инструментов, работающих со штрихом (рис. 4.23). Рис. 4.23. Панель Brushes (Кисти)Соответственно, содержимое данной панели является активным
Кисти
Кисти CreatePatternBrush Функция CreatePatternBrush создает логическую кисть с указанным шаблоном в виде битового изображения. Битовое изображение не может быть независимым от оборудования битовым изображением ( DIB ), которое создано функцией CreateDIBSection . HBRUSH CreatePatternBrush ( HBITMAP hbmp //
Пример 7-3. Арифметические выражения внутри (( ))
Пример 7-3. Арифметические выражения внутри (( )) #!/bin/bash# Проверка арифметических выражений.# Инструкция (( ... )) вычисляет арифметические выражения.# Код возврата противоположен коду возврата инструкции [ ... ] !(( 0 ))echo "Код возврата "(( 0 ))": $?." # 1(( 1 ))echo "Код возврата "(( 1 ))": $?."
Стили кисти
Стили кисти Стили кисти задаются перечислимым типом BrushStyleType: type BrushStyleType = (bsSolid, bsClear, bsHatch, bsGradient); Константы имеют следующий смысл: bsSolid Сплошная кисть (по умолчанию) bsClear Прозрачная кисть bsHatch Штриховая кисть bsGradient Градиентная кисть Для всех
Стили штриховки кисти
Стили штриховки кисти Стили штриховки кисти задаются перечислимым типом HatchStyle. Кроме того, для стилей штриховки кисти определены следующие константы:
13-Я КОМНАТА: Жизнь внутри 2
13-Я КОМНАТА: Жизнь внутри 2 Автор: Владимир ГуриевНашему блогу inside computerra ru вчера исполнился месяц, и, наверное, уже можно попытаться подвести какие-то итоги. Независимо от того, что произойдет с этим маленьким сайтом дальше, опыт получился интересный – по крайней мере, для
Что находится внутри?
Что находится внутри? Пока нетбук находится на гарантии, разбирать его не стоит. Лучше познакомимся с его внутренним устройством на картинках. Процессор обрабатывает информацию — это «мозг» компьютера.По производительности процессоры, которые устанавливают в нетбуки,
9.8. Палитра Brushes (Кисти)
9.8. Палитра Brushes (Кисти) Как известно, кистью в Photoshop называется не только инструмент, но и своего рода аналог реального изделия. То есть существуют разные наборы кистей со своими свойствами, которые могут использоваться как шаблоны при работе с такими инструментами, как Brush