Класс TDC
Хотя специализированные классы контекстов устройств обеспечивают дополнительные функциональные возможности, ориентированные
на конкретную специфику класса, TDC содержит большую часть необходимых функций.
Из-за большого числа содержащихся в этом классе функций мы
не будет обсуждать каждую из них подробно, а коснемся лишь общих
функциональных возможностей TDC, специфических для ObjectWindows
функций и функций типа API. Многие функции TDC аналогичны функциям API Windows.
TDC предусматривает только один общедоступный конструктор и
деструктор. В конструкторе задается HDC - описатель контекста
устройства. По существу это означает, что перед построением объекта TDC вы должны иметь существующий контекст устройства. Обычно
TDC не требуется строить непосредственно. Вместо этого при передаче некоторого контекста устройства как параметра функции или
указателя используется объект TDC. Указатель может ссылаться на
некоторый контекст устройства, содержащийся в TDC или производном
от него объекте.
~TDC уничтожает объекты и восстанавливает в контексте устройства все объекты по умолчанию. TDC предусматривает также два
защищенных конструктора, используемых только в производных классах.
В TDC имеется одна операция преобразования, HDC, которая
позволяет вам возвратить контекст устройства. Данная операция чаще всего вызывается неявно.
Вы можете сохранить и восстановить контекст устройства аналогично тому, как используются функции SaveDC и RestoreDC. Вы можете также переустановить контекст устройства с помощью функции ResetDC. Единственный параметр ResetDC - это ссылка на структуру
DEVMODE.
Для получения информации об устройстве можно использовать
функцию GetDeviceCaps. Эта функция имеет один параметр - индекс
типа получаемой из контекста устройства информации. Возможные
значения этого параметра те же, что и функции API Windows.
Функция GetDCOrg позволяет найти логические координаты текущего контекста устройства в абсолютных физических координатах
устройства. В параметре этой функции задается ссылка на структуру
TPoint, а возвращаемое значение говорит об успешном или неуспешном выполнении.
Функция SelectObject используется для включения объекта GDI
в контекст устройства. Эта функция имеет 4 версии с различными
параметрами. Используемая версия зависит от типа выбираемого объекта. Функция TMemoryDC позволяет выбрать битовый массив.
Выбираемые в контексте устройства графические объекты обычно
существуют как логические объекты, содержащие информацию, необходимую для создания объекта. Графические объекты связываются с логическими объектами через описатель Windows. Когда в контексте
устройства выбирается графический объект, в контексте устройства
создается физический инструмент.
С помощью функции SelectStockObject можно выбрать стандартный объект. Эта функция имеет один параметр, эквивалентный параметру, используемому при вызове функции API GetStockObject. По
существу эта функция эквивалентна двум вызовам: GetStockObject
(для получения стандартного объекта) и SelectObject (для включения стандартного объекта в контекст устройства).
TDC предусматривает функции для восстановления в контексте
устройства исходных объектов. Это RestoreBrush, RestorePen, RestoreFont и RestorePalette. RestoreTextBrush можно использовать
только для 32-разрядных приложений. Все эти функции вызываются
функцией RestoreObjects.
GetBrushOrg имеет один параметр - ссылку на объект TPoint.
Она помещает в него координаты начала кисти. Функция SetBrushOrg
имеет еще один параметр - TPoint*. Эта функция устанавливает начала кисти контекста устройства в значения x и y первого объекта
TPoint. Второй параметр по умолчанию равен 0. Если вы передаете
указатель на TPoint, TDC::SetBrushOrg помещает в x и y объекта
старые значения кисти.
TDC обеспечивает функции для работы в контексте устройства с
палитрами и цветами: GetNearestColor, GetSystemPaletteEntries,
GetSystemPaletteUs, RealizePalette, SetSystemPaletteUse и UpdateColors.
Для установки режима рисования в контексте устройства используются функции атрибута рисования. Все эти функции аналогичны
функциям API с теми же именами, но в каждой из них может быть
опущен параметр HDC: GetBkColor, GetBkMode, GetPolyFillMode, GetROP2, GetStretchBltMode, GetTextColor, SetBkColor, SetBkMode,
SetPolyFillMode, SetROP2, SetStretchBltMode и SetTextColor. Функция SetMiterLimit доступна только в 32-разрядных приложений.
Для установки области просмотра и режимов отображения окна
используйте следующие функции: GetMapMode, GetViewportExt, GetVieportOrg, GetWindowExt, GetWindowOrg, OffsetViewportOrg, GetViewportExt, OffsetWindowOrg, ScaleViewportExt, ScaleWindowExt, SetWindowExt, SetMapMode, SetViewportExt, SetViewportOrg, SetWindowExt и SetWindowOrg. Для 32-разрядных приложений доступны также
функции ModifyWorldTransform и SetWorldTransform.
Функции координат преобразуют логические координаты в физические и наоборот. Это функции DPtoLP и LPtoDP. Для задания и
считывания простых и сложных областей в области отсечения контекста устройства используются функции ExcludeClipRect, ExcludeUpdateRgn, GetBoundsRect, GetClipRgn, IntersectClipRect, OffsetClipRgn, PtVisible, RectVisible, SelectClipRgn и SetBoundsRect.
Для доступа к метафайлам служат функции EnumMetaFile, PlayMetaFile, PlayMetaFileRecord. Для перемещения в текущую точку используются три версии функции MoveTo (эта функция перемещает перо
в точку с заданными координатами).
В параметре функции GetCurrentPosition задается ссылка на
объект TPoint. Она помещает координаты текущей позиции в объект
TPoint.
Для доступа к шрифтам и работы с ними используйте функции
TDC для работы со шрифтами: EnumFontFamilies, EnumFonts, GetAspectRatioFilter, GetCharABCWidth, GetCharWidth, GetFontData и
SetMapperFlags.
Функции работы с маршрутом доступны только для 32-разрядных
приложений. За исключением того, что эти функции не требуют параметра HDC, эти функции совпадают с соответствующими функциями
Win32: BeginPath, CloseFigure, EndPath, FillPath, FlattenPath,
PathToRegion, SelectClipPath, StrokedAndFillPath, StrokePath и
WidenPath.
TDC дает вам большое разнообразие функций вывода для различного вида объектов, которые может обрабатывать стандартный контекст устройства, включая пиктограммы, прямоугольники, области,
формы, битовые массивы и текст. Почти все эти функции имеют несколько версий, одна из которых почти идентична соответствующей
функции API (за исключением отсутствия параметра HDC), а альтернативные версии, использующие TPoint, TRect, TRegion и другие
данные инкапсулируемые ObjectWindows данные делают вызовы более
понятными.