Что такое код createhatchbrush

Содержание

Может ли один предоставить мне образец использования CreateHatchBrush

Я хочу, чтобы нарисовать тень вокруг миниатюры в моем программном обеспечении. Кажется CreateHatchBrush может помочь, но я не знаю, как использовать его, кто может предоставить мне образец в C ++? Большое спасибо!

Самый простой вариант будет использовать GDI + , чтобы сделать это. Вот быстрый и грязный образец тени рендеринга:

Надеюсь это поможет!

Я не образец, но некоторые намеки на общее использование щеток в Windows.

CreateHatchBrush() возвращает дескриптор. Вы должны использовать эту ручку , чтобы сделать эту кисть текущей кисти в контексте устройства вы используете для визуализации. Вызов контекста устройства в SetObject функции (обычная для Windows GDI требует версии):

Описание инструментов рисования

Как было отмечено выше, к графическим объектам, обеспе­чивающим выполнение графических операций, относятся перья, кисти, растровые изображения, палитры, шрифты. Рассмотрим общий алго­ритм работы с инструментами рисования:

а) создать новый инструмент с заданными характеристиками с по­
мощью функций Create… (например, CreatePen (перо)) и запомнить
его дескриптор;

б) использовать функцию SelectObject для загрузки в контекст уст­
ройства дескриптора созданного инструмента с предварительным со­
хранением дескриптора старого инструмента, который был установлен
по умолчанию, если это первая смена инструмента. Удобство функции
SelectObject в том, что она возвращает дескриптор того инструмента
из контекста, который будет заменен, что используется для его сохра­
нения;

в) использовать новый инструмент для вывода изображения или
текста;

г) выбрать в контекст устройства сохраненный дескриптор инстру­
мента по умолчанию;

д) уничтожить созданные инструменты функцией DeleteObject.
Создание новых инструментов обычно осуществляется при обра­
ботке сообщения WM_CREATE создания окна, для которого необходимы новые инструменты.

Выбор инструментов и рисование осуществляются при обработке WMPAINT, когда уже известен контекст устройства после отработки BeginPaint. Так как в контексте устройства хранится только один де­скриптор инструмента рисования, то при смене кисти или пера в про­цессе рисования необходимо загружать в контекст дескрипторы тре­буемых инструментов по мере надобности. Сохранять при этом нужно только дескриптор инструмента по умолчанию, чтобы его можно было восстановить в контексте перед вызовом функции EndPaint.

Удаление созданных инструментов, как правило, реализуется при обработке сообщения WMDESTROY, хотя можно создавать и уда­лять инструменты при обработке сообщения WMPAINT.

Отметим, что в Windows предусмотрен стандартный набор кистей, перьев и шрифтов, которые могут быть использованы в программе. Их дескрипторы создавать и уничтожать не нужно, их нужно затребовать для использования функцией GetStockObject и затем загрузить в кон­текст.

Любая функция рисования линий и кривых, а также контуров замк­нутых фигур использует перо (реп), дескриптор которого хранится в контексте устройства в данный момент. По умолчанию используется перо BLACKPEN. Оно рисует сплошные черные линии толщиной 1 пиксел независимо от режима отображения. Кроме черного пера суще­ствует стандартное белое перо с шириной в 1 пиксел (WHITEPEN), невидимое перо для вывода фигур без контура (NULLPEN). Для ри­сования линий разного цвета, толщины и стиля GDI позволяет созда­вать логические перья. Логическое перо имеет дескриптор типа HPEN (handle to a pen). Будем рассматривать так называемые простые перья. Для них не сплошные линии можно рисовать только толщиной 1 пик­сел, а сплошные линии могут иметь любую толщину, но закругленные окончания.

Для получения дескриптора простого пера вызываются функция CreatePen или CreatePenlndirect Функция CreatePen имеет три па­раметра:

1. Стиль пера, определяющий порядок следования пикселов и расположение линии. Возможные значения этого параметра приведе­ны в таблице 2.1.

Толщина линии в логических единицах. Если в контексте устройства используется режим отображения по умолчанию ММТЕХТ, то логические единицы совпадают с физическими едини­цами и выражаются в пикселах. Если логические единицы не совпадают с физическими, то физическая толщина пера устанавливается в со­ответствии с масштабом, и толщина пера будет одинаковой только в том случае, когда масштабы по обеим осям одинаковы. Если второй параметр равен нулю, то толщина принимается равной 1 пикселу неза­висимо от режима отображения.

Ограниче­ния на толщину

3. Цвет пера, имеющий тип COLORREF. Обычно это значение задается либо с помощью макроса RGB, либо с помощью макроса PALETTERGB. Первый вариант используется, если устройство вывода поддерживает полный диапазон цветов, определяемый 24-битным RGB-значением. Аргументами макроса являются интенсивности крас­ной, зеленой и синей компонент цвета. Второй вариант (макрос PALETTERGB) необходимо использовать, если приложение работает с логической палитрой, например, для моделей дисплеев, которые под­держивают только 256 цветов. В последнем случае система Windows преобразует запрошенный RGB-цвет в наиболее близкий цвет из па­литры.

Получение дескриптора пера с помощью CreatePenlndirect требу­ет заполнения структуры типа LOGPEN, включающей поля, описы­вающие стиль, толщину и цвет пера.

После создания дескриптора пера с требуемыми параметрами его необходимо загрузить в контекст устройства с помощью функции Se-lectObject. Для рисования простейших геометрических фигур можно использовать следующие функции:

MoveToEx перемещение текущей позиции пера в точку (х,у). Параметры дескриптор контекста устройства, х-координата новой текущей позиции, у-координата новой текущей позиции, предыдущая позиция пера. По умолчанию текущая позиция пера установлена в точку (0,0);

GetCurrentPositionEx получение текущей позиции пера. Пара­метры hDC дескриптор контекста устройства, адрес переменной pt типа POINT;

LineTo рисование отрезка, начиная с точки, в которой находится текущая позиция пера, до точки (xEnd, yEnd), не включая ее в отрезок. Параметры дескриптор контекста устройства, xEnd х-координата конечной точки, yEnd у-координата конечной точки;

Polyline рисование ломаной линии. Параметры hDC, адрес массива точек, количество точек. Функция Polyline не использует те­кущую позицию пера и не изменяет ее;

— Дуги рисуются как часть эллипса. Размеры и расположение эл­липса определяются ограничивающим прямоугольником. Ограничи­вающий прямоугольник задается координатами левой верхней (xLeft, уТор) и правой нижней (xRight, yBottom) вершин. Центром эллипса является точка (хО, уО), где xO=xLeft + (xRight xLeft)/2, a y0= уТор + (yBottom уТор)/2. Для рисования дуг предназначены функции Arc, ArcTo и AngleArc. В качестве параметров помимо координат точек, задающих эллипс, им передаются координаты начальной и конечной точек дуги;

Отметим, что существует функция вывода одного пиксела SetPixel, однако подобный способ рисования был бы очень медленным.

Все функции рисования, рассмотренные выше, рисуют незамкну­тые фигуры. Однако хотелось бы иметь возможность рисовать замкну­тые фигуры и закрашивать их внутренние области. Для этой цели ис­пользуется кисть. Кисть представляет собой картинку размером 8*8 пикселов, которая при закрашивании дублируется по горизонтали и вертикали. К стандартным кистям относятся BLACKBRUSH (черная), DKGRAYBRUSH (темно-серая), GRAYBRUSH (серая), LTGRAYBRUSH (светло-серая) WHITEBRUSH (белая, использует­ся по умолчанию), NULLBRUSH (пустая, без заливки), DCBRUSH (сплошная цветная, по умолчанию белая, другой цвет после вызова SetDCBrushColor). Дескрипторы всех стандартных кистей запраши­ваются по GetStockObject

Для получения дескриптора нестандартной кисти используются следующие функции:

1. CreateSolidBrush однотонная кисть. Параметр цвет, формируемый RGB или PALETTERGB;

2. CreateHatchBrush штриховая кисть. Параметры стиль штриховки (HS_HORIZONTAL, HS_VERTICAL, HS_BDIAGONAL, HS_CROSS и т.д.), цвет.

3. CreatePatternBrush кисть с произвольным рисунком в виде растрового изображения. Параметр дескриптор растрового изображения.

Для создания кисти любого типа можно использовать функцию CreateBrushlndirect

Рисование замкнутых фигур осуществляется с помощью функций:

Rectangle, FillRect, FrameRect, InvertRect и DrawFocusRect -прямоугольник;

Pie сектор эллипса;

RoundRect прямоугольник с закругленными углами;

Источник: Сучкова, Л.И. Win32 API: основы программирования: учебное пособие/ Л.И. Сучкова; АлтГТУ им. ИИ. Ползунова. -Барнаул, АлтГТУ, 2010. 138 с, ил.

Русский справочник по Win32 API (30 стр.)

Сообщения и очереди сообщений

GetQueueStatus

Функция GetQueueStatus возвращает флаги, которые показывают тип сообщений, обнаруженных в очереди сообщений вызывающего потока.

DWORD GetQueueStatus (

UINT flags // флаги состояния очереди

Параметры

flags — определяет флаги состояния очереди, указывая типы сообщений для проверки. Может быть комбинацией следующих значений:

Значение

Пояснение

Сообщение ввода, WM_TIMER, WM_PAINT, WM_HOTKEY или помещенное в очередь сообщение.

Любое сообщение ввода.

Сообщение WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP или WM_SYSKEYDOWN в очереди.

Сообщение WM_MOUSEMOVE или сообщение клавиши мыши ( WM_LBUTTONUP, WM_RBUTTONDOWN и т. п.).

Сообщение клавиши мыши ( WM_LBUTTONUP, WM_RBUTTONDOWN и т. п.).

Помещенное сообщение, отличное от перечисленных выше, находится в очереди.

Сообщение, отправленное другим потоком или приложением, находится в очереди.

Возвращаемые значения

Старшее слово показывает типы сообщений, находящихся в очереди. Младшее слово показывает типы сообщений, которые были добавлены в очередь и все еще там находятся с момента последнего вызова функции GetQueueStatus : GetMessage или PeekMessage .

Комментарии

Присутствие флага QS_ в возвращаемом значении не гарантирует, что последующий вызов функции PeekMessage или GetMessage вернет сообщение. PeekMessage или GetMessage выполняют определенную внутреннюю фильтрацию, которая может привести ко внутренней обработке сообщения. По этой причине, возвращаемое функцией GetQueueStatus значение должно быть рассматриваемо только как намек на то, должна ли быть вызвана функция GetMessage или PeekMessage .

См. также

GetInputState, GetMessage, PeekMessage .

Кисти

CreatePatternBrush

Функция CreatePatternBrush создает логическую кисть с указанным шаблоном в виде битового изображения. Битовое изображение не может быть независимым от оборудования битовым изображением ( DIB ), которое создано функцией CreateDIBSection .

HBRUSH CreatePatternBrush (

HBITMAP hbmp // дескриптор битового изображения

Параметры

hbmp — идентифицирует битовый образ, используемый для создания логической кисти.

Windows 95: Создание кистей из битовых образов размером более 8 x 8 пикселей не поддерживается. Если указан битовый образ большего размера, используется его часть.

Возвращаемые значения

В случае успеха возвращается дескриптор логической кисти.

В случае неудачи возвращается NULL .

Комментарии

Шаблонная кисть — это битовый образ, который Windows использует для рисования внутренних частей закрашенных фигур.

После того, как приложение создало кисть, вызвав функцию CreatePatternBrush , оно может выбрать эту кисть в любой контекст устройства при помощи функции SelectObject .

Вы можете удалить шаблонную кисть без воздействия на связанный битовый образ, используя функцию DeleteObject . Таким образом, вы можете использовать этот битовый образ для создания какого угодно числа шаблонных кистей.

Кисть, созданная с использованием монохромного битового образа, имеет цвета текста и фона того контекста устройства, в котором происходит рисование. Пиксели, представляемые нулевым битом, отрисовываются текущим цветом текста; пиксели, представляемые единичным битом, отрисовываются текущим цветом фона.

Битовое изображение, идентифицируемое значением параметра hbmp , не может быть независимым от оборудования битовым изображением ( DIB ), которое создано функцией CreateDIBSection . Если оно является независимым от оборудования битовым изображением, то вызов CreatePatternBrush завершается неудачей.

См. также

CreateBitmap, CreateBitmapIndirect, CreateCompatibleBitmap, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateDIBSection, CreateHatchBrush, DeleteObject, GetBrushOrgEx, LoadBitmap, SelectObject, SetBrushOrgEx .

Библиотека оболочки

DragAcceptFiles

Функция DragAcceptFiles регистрирует окно, если оно принимает перетаскиваемые на него файлы.

VOID DragAcceptFiles (

HWND hWnd , // дескриптор окна

BOOL fAccept // опция разрешения принятия файлов

Параметры

hWnd — идентифицирует окно, регистрируемое, если оно принимает перетаскиваемые на него файлы.

fAccept — определяет, принимает ли окно, определенное параметром hWnd , перетаскиваемые на него файлы. Значение TRUE разрешает принятие файлов, значение FALSE его запрещает.

Возвращаемые значения

Функция не возвращает значения.

Комментарии

Приложение, вызывающее DragAcceptFiles со значением TRUE параметра fAccept идентифицирует себя как способное обрабатывать сообщение WM_DROPFILES от диспетчера файлов.

См . также

DragFinish

Функция DragFinish освобождает память, которую Windows выделила для использования в процессе передачи имен файлов в приложение.

VOID DragFinish (

HDROP hDrop // дескриптор освобождаемой памяти

Параметры

hDrop — идентифицирует структуру, описывающую перемещенные мышью файлы. Этот дескриптор извлекается из параметра wParam сообщения WM_DROPFILES.

Возвращаемые значения

Функция не возвращает значения.

См . также

DragQueryFile

Функция DragQueryFile извлекает имена перемещенных мышью файлов.

UINT DragQueryFile (

HDROP hDrop , // дескриптор структуры для перемещенных файлов

UINT iFile , // индекс запрошенного файла

LPTSTR lpszFile , // буфер для имени файла

UINT cch // размер буфера для имени файла

Параметры

hDrop — идентифицирует структуру, содержащую имена файлов.

iFile — определяет индекс запрашиваемого файла. Если значение параметра iFile равно 0 xFFFFFFFF, DragQueryFile возвращает число перемещенных файлов. Если значение параметра iFile лежит между нулем и количеством перемещенных файлов, DragQueryFile копирует соответствующее значению им файла в буфер, указанный параметром lpszFile .

lpszFile — указывает на буфер для имени перемещенного файла. Им файла представляет собой завершающуюся нулем строку. Если значение lpszFile равно NULL, DragQueryFile возвращает необходимый размер буфера в символах.

cch — определяет размер буфера в символах.

Возвращаемые значения

Когда функция копирует имя файла в буфер, то возвращается число скопированных символов без учета завершающего нулевого символа.

Если значение параметра iFile равно 0 xFFFFFFFF, то возвращается число перемещенных мышью файлов.

Если значение параметра iFile лежит между нулем и количеством перемещенных файлов, и значение параметра lpszFile равно NULL, возвращается требуемый размер буфера, в символах, без учета завершающего нулевого символа.

Использование встроенной кисти

Для выбора одной из встроенной кисти вы можете воспользоваться макрокомандой GetStockBrush , определенной в файле windowsx.h:

#define GetStockBrush(i) ((HBRUSH)GetStockObject(i))

В качестве параметра для этой макрокоманды можно использовать следующие значения:

Значение Описание
BLACK_BRUSH Кисть черного цвета
WHITE_BRUSH Кисть белого цвета
GRAY_BRUSH Серая кисть
LTGRAY_BRUSH Светло-серая кисть
DKGRAY_BRUSH Темно-серая кисть
NULL_BRUSH Бесцветная кисть, которая ничего не закрашивает
HOLLOW_BRUSH Синоним для NULL_BRUSH

Как видно из только что приведенной таблицы, в Windows есть только монохромные встроенные кисти.

Макрокоманда GetStockBrush возвращает идентификатор встроенной кисти.

Прежде чем использовать полученную таким образом кисть, ее надо выбрать в контекст отображения (так же, как и перо). Для этого проще всего воспользоваться макрокомандой SelectBrush :

#define SelectBrush(hdc, hbr) \ ((HBRUSH)SelectObject((hdc), (HGDIOBJ)(HBRUSH)(hbr)))

Макрокоманда SelectBrush возвращает идентификатор старой кисти, выбранной в контекст отображения раньше.

Создание кисти

Если вам нужна цветная кисть, ее следует создать с помощью функции CreateSolidBrush :

HBRUSH WINAPI CreateSolidBrush(COLORREF clrref);

В качестве параметра для этой функции необходимо указать цвет кисти. Для выбора цвета вы можете воспользоваться, например, макрокомандой RGB, позволяющей указать содержание отдельных цветовых компонент.

Windows может выбрать для кисти чистые или смешанные цвета, что зависит от текущего цветового разрешения. Подробности вы сможете узнать позже из главы, посвященной работе с цветами и цветовыми палитрами.

После использования созданной вами кисти ее следует удалить, не забыв перед этим выбрать в контекст отображения старую кисть. Для удаления кисти следует использовать макрокоманду DeleteBrush :

#define DeleteBrush(hbr) DeleteObject((HGDIOBJ)(HBRUSH)(hbr))

Приложение может заштриховать внутреннюю область замкнутой фигуры, создав одну из шести кистей штриховки функцией CreateHatchBrush :

HBRUSH WINAPI CreateHatchBrush(int fnStyle, COLORREF clrref);

С помощью параметра clrref вы можете определить цвет линий штриховки.

Параметр fnStyle задает стиль штриховки:

Стиль штриховки Внешний вид
HS_BDIAGONAL
HS_CROSS
HS_DIAGCROSS
HS_FDIAGONAL
HS_HORIZONTAL
HS_VERTICAL

Вы можете использовать свой собственный стиль штриховки, создав кисть из битового изображения размером 8х8 пикселов (можно использовать только такой размер).

Если битовое изображение кисти определено в ресурсах приложения, его следует загрузить при помощи функции LoadBitmap . Эта функция возвратит идентификатор битового изображения. Затем для создания кисти этот идентификатор следует передать в качестве параметра функции CreatePatternBrush :

Забегая вперед, скажем, что битовые изображения делятся на те, которые хранятся в формате, зависящем от аппаратных особенностей устройства отображения, и на те, которые хранятся в аппаратно-независимом формате. Последние более универсальны, однако труднее в использовании. С помощью функции CreateDIBPatternBrush вы можете использовать для кисти битовое изображение в аппаратно-независимом формате:

HBRUSH WINAPI CreateDIBPatternBrush( HGLOBAL hglbDibPacked, UINT fnColorSpec);

Первый параметр указывает на область глобальной памяти, в которой содержится аппаратно-независимое битовое изображение в упакованном формате. Второй параметр определяет содержимое таблицы цветов, используемое этим битовым изображением, и может принимать два значения: DIB_PAL_COLORS (таблица цветов содержит ссылки на цветовую палитру) DIB_RGB_COLORS (таблица цветов содержит отдельные компоненты цвета).

Илон Маск рекомендует:  Функции oracle

Более подробное обсуждение таких понятий, как аппаратно-независимые битовые изображения и таблица цветов мы отложим до главы, посвященной битовым изображениям.

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

Что такое скальпированная рана?

Скальпированные раны – не слишком распространенный тип травм, которые практически невозможно получить в бытовых условиях. В большинстве случаев они являются следствием тяжелых ранений и представляют непосредственную опасность для жизни человека!

Ведь от того, насколько быстро пострадавшему будет оказана первая помощь, напрямую зависит, будет ли он жить.

Как лечить скальпированные раны?

Как образуются скальпированные раны?

Тяжелое поражение кожных покровов, имеющее название скальпированной раны, таит в себе достаточно специфические причины и происходит в основном по вине человека. Среди наиболее распространенных групп риска можно выделить:

  1. Получение тяжелых травм на производстве. В 90 случаях из 100 тяжелые увечья человек получает исключительно по своей вине, пренебрегая правилами техники безопасности. Следствием этого становятся тяжелые увечья в виде рваных или скальпированных ран. В худшем же случае человек может даже лишиться конечностей.
  2. Дорожно-транспортные происшествия. Именно аварии считаются потенциальным источником травм, в том числе и скальпированных. Особенно чреваты такие события для тех, кто предпочитает ездить непристегнутым, – вероятность получения тяжелой травмы возрастает примерно на 30%!
  3. Тяжелые бытовые травмы. Стать причиной увечий может и кухонная техника, эксплуатируемая неприемлемым образом. И для того чтобы не стать заложником такой ситуации, человек просто обязан ознакомиться с инструкцией перед использованием того или иного прибора!

Статистика показывает: большинство пострадавших с травмами головы и других конечностей могли бы быть спасены, подоспей к ним вовремя помощь. Помочь человеку, получившему травму такого рода, не так уж сложно! Достаточно лишь помнить несколько простых правил:

  1. Соблюдение спокойствия. Зачастую скальпированная рана вызывает у окружающих шок, смятение и состояние полнейшего ступора. С этим состоянием необходимо справиться как можно быстрее и переключить внимание на оказание помощи.
  2. Остановка кровотечения. Рваные и скальпированные раны обычно характеризуются значительной потерей крови, которую следует постараться остановить любой ценой. Наложение жгута, особенно в случае с раной головы, оказывается нецелесообразным, поэтому желательно ограничиться лишь тугой повязкой. Если же в поле зрения оказывается полностью оторванный лоскут кожи, его следует положить в пакет со льдом и отдать медицинским работникам, которые и определят, целесообразно ее пришивание или нет.

При этом следует помнить, что пострадавший может испытывать сильнейший болевой шок, способный привести даже к коме. Его ни в коем случае нельзя оставлять без обезболивания, пусть даже самыми простыми препаратами, продающимися в ближайшей аптеке.

Лечить скальпированную рану головы самостоятельно с использованием подручных средств является неэффективным и даже опасным для жизни! Человек, не обладающий медицинскими навыками, попросту не сможет оценить всей серьезности ситуации и назначить себе по-настоящему действенное лечение. Драгоценное же время при этом будет упущено, и на восстановление потребуется в разы больше времени.

В большинстве случаев этот тип травм головы характеризуется обильной кровопотерей, требующей переливания крови или ее отдельных компонентов.

Сделать это можно исключительно в стенах медицинского учреждения, под наблюдением опытного специалиста, корректирующего объем и частоту вливаний. Без проведения данной процедуры процесс заживления может существенно затянуться.

Отразится это и на общем состоянии больного, у которого может наблюдаться слабость, постоянное недомогание и головокружения.

Кроме того, в ряде случаев пациенту требуется хирургическое вмешательство, в процессе которого на поврежденном участке будет восстановлена анатомическая целостность кожных покровов. Кожа сшивается специальным косметическим швом, который не оставляет шрамов.

Однако в особо тяжелых случаях избежать рубцов не удается. Тогда врач может посоветовать косметическое удаление всех изъянов с помощью лазера.

Как правило, увидеть результат можно будет уже через несколько процедур, однако для закрепления эффекта их потребуется значительно больше.

Наиболее радикальный метод – это пластическая операция, позволяющая сразу же убрать все рубцы.

Однако такая корректировка стоит достаточно дорого. Помимо непосредственного лечения раны, больному будет назначена еще и медикаментозная терапия, позволяющая исключить развитие воспалительного процесса в тканях.

Восстановление скальпа – это постепенный процесс, от которого не следует ожидать быстрых результатов. От начала лечения до рубцевания покровов может пройти несколько месяцев! И за этот период придется безукоризненно выполнять все предписания лечащего врача. Ведь только в этом случае можно будет гарантировать полное выздоровление.

Виды открытых ран стопы и их коды по МКБ-10

Раной называют нарушение целостности ткани или органов. Вызывается повреждение механическим или химическим действием. Чаще всего травмируются ноги и руки.

Согласно устоявшимся правилам, код открытой раны стопы по МКБ-10 – S91 – разделяется на:

  1. S91.0 – Открытая рана (ОР) области голеностопного сустава.
  2. S91.1 – Открытая рана пальца стопы без повреждения ногтевой пластинки.
  3. S91.2 – Рана, сопровождающаяся нарушением поверхности ногтя.
  4. S91.3 – ОР иных мест ступни.
  5. S91.7 – Многочисленные ссадины голеностопного сустава и стопы

МКБ-10 – аббревиатура, обозначающая перечень общепринятых международным сообществом кодировок заболеваний. Цифра означает порядковый номер пересмотра рассматриваемой классификации.

Открытая рана

В медицинской практике дифференцируют закрытые и открытые раневые травмирования. Последний термин характеризует ранения, при которых повреждаются кожные покровы и слизистые оболочки. Травма сопровождается зиянием – расхождением краев в стороны.

Выделяют следующие виды ран:

  1. Укушенная.
  2. Резаная.
  3. Скальпированная.
  4. Рваная.
  5. Колотая.
  6. Огнестрельная.

Первая защитная реакция организма – воспаление. Оно возникает вследствие влияния на тело различных раздражителей, характеризуется местными проявлениями. На начальном этапе происходят биохимические изменения, в результате которых к месту повреждения приходят медиаторы воспаления. Макрофаги активно перерабатывают поврежденные клетки тканей, что способствует ускорению естественной регенерации.

Чем лучше кровоток в пораженной области, тем быстрее пройдет восстановление.

Колотая рана

Характеризуется малым размером отверстия, травмированием окружающих тканей, глубиной. Грозит повреждением внутренних органов, наносится длинными острыми предметами. Болевой синдром не выражен, поверхностного кровотечения нет, но возможно образование подкожных синяков.

Повреждение часто происходит посредством шила, отвертки, иглы или любого другого длинного предмета с острым концом. Ткани вокруг раны не рассекаются, повреждение опасно глубиной, возможностью задеть внутренние органы, их фасции, нарушить целостность кровеносных сосудов. Края расходятся несильно, поверхностное кровотечение минимально.

Резаная рана

Наносится такими предметами, как ножи, острый кусок стекла, бритва или лезвие. Надавливание на ткани сосредотачивается в узкой плоскости, происходит «расщепление» под действием орудия травмирования. При таких разрезах болевой синдром ощутим, наблюдается сильное кровотечение, а расхождение краев раны зависит от глубины и силы надавливания.

Нельзя самостоятельно извлекать предмет из резаной раны, т.к. при отсутствии специальных навыков трудно вынуть его в той же плоскости, в которой он вошел – создастся еще одна раневая поверхность.

Инфицированная рана

К данному классу обычно относят все случайные ранения. Поврежденная поверхность становится входными воротами для проникновения инфекции, поэтому так важно своевременно обрабатывать пораженный участок.

Фазы реакции подразделяются на катаболическую и анаболическую.

Сначала процессы в организме усиливаются: возникает подъем температуры, снижение белковых синтезов, происходит потеря веса, понижается проницаемость мембранных структур.

Далее отмечается восстановление и возвращение работы всех систем в свое русло. Наблюдается незначительное повышение концентрации гормонов, выделяемых надпочечниками.

Инфицированное повреждение может привести к серьезному нагноению без должной обработки. Микробная флора влечет за собой риск тяжелых болезней, таких как столбняк, бешенство.

Таким образом, медицинской практике известно большое количество видов открытых ран. Все описанные выше травмы стопы отмечены в МКБ-10 кодами S91.1, S91.2 и S91.3 в зависимости от того, затронуло повреждение ногтевую пластину или нет.

Скальпированная рана кисти код по мкб 10

Ушиб голеностопного сустава – это серьезное повреждение, которое нарушает трудоспособность, а иногда и приводит к инвалидизации.

Во время ушиба повреждается не только кожа, но также и мышцы, подкожная клетчатка, нервные окончания и кровеносные сосуды.

МКБ 10 – это сокращенное название международной классификации болезней. В этой классификации ушиб голеностопного сустава имеет свой номер – S90.0.

Для начала выясним причины, которые приводят к развитию такого повреждения.

Факторы-провокаторы

Спровоцировать возникновение ушиба могут несколько причин:

  • удар;
  • падение с высоты;
  • анатомическая особенность. Сустав немного выпирает и практически лишен подкожно-жировой клетчатки, а это делает его уязвимым к травмам.

Как можно понять, что у вас именно ушиб? Рассмотрим характерные признаки.

При ушибе крайне важно своевременно начать лечение, иначе может серьезно нарушиться функциональная способность сустава.

Клиническая картина

Данное повреждение проявляет себя появлением таких неприятных симптомов:

  • сразу же после травмы появляется сильная боль, которая может не проходить несколько суток;
  • болезненные ощущения затрагивают всю стопу настолько, что человек не может сделать шаг;
  • хромота, которая сильно заметна;
  • отек и припухлость стопы;
  • сдавливание нервов, которое только усиливает болезненность;
  • гематома, развивающаяся вследствие разрыва мелких сосудов;
  • в тяжелых случаях начинают неметь пальцы ног и вся стопа.

Возможные осложнения

Нелеченное повреждение может вылиться в такие последствия:

  1. скопление в полости сустава, которое называется «гемартроз». Оно возникает вследствие того, что повреждается капсула сустава;
  2. артроз. Через некоторое время, особенно когда повреждения возникали неоднократно, может развиться подобная дегенеративная патологии;
  3. еще одним осложнением, которое может возникнуть непосредственно сразу после повреждения, – это воспалительный процесс в синовиальной оболочке. При малейшем соприкосновении с местом повреждения возникает сильнейшая боль и припухлость;
  4. в связи с тем, что из-за травмы человек начинает мало двигаться, возникает нарушение кровообращения. Кожа приобретает неестественный вид, а отечность начинает прогрессировать. Данное осложнение имеет название «синдром Зудека».

Оказание первой медицинской помощи

Первая помощь при травматизации заключается в следующем:

  • первым делом следует расположить ногу таким образом, чтобы она была выше головы;
  • применение Рицинола для уменьшения отека и болевых ощущений;
  • поврежденное место следует перевязать эластичным бинтом. В качестве альтернативы можно использовать обычный бинт или повязку;
  • к суставу нужно приложить холодный компресс;
  • для достижения обезболивающего эффекта можно выпить таблетку анальгезирующего препарата.

Методы борьбы

Лечение повреждения должно быть комплексным. Оно включает в себя следующие мероприятия:

  • в первый же день после травмы нельзя нагружать поврежденный сустав, а под ногу положить мягкую подушку;
  • при сильных болях во время ходьбы следует пользоваться тростью, если же боли не сильные, то стоит просто постараться ограничить ходьбу, а также использовать эластичный бинт. Бинт нельзя оставлять на ночь. При появлении сильных болей применяют гипсовые лангеты с противовоспалительным эффектом, которые не снимают в течение десяти дней;
  • использование полимедэла. Это специальная пленка, которая способна восстанавливать кровообращение и поврежденные ткани. Полимедэл следует накладывать примерно на 20-30 минут;
  • лечение также включает в себя проведение массажа голени и стопы;
  • гимнастические упражнения, которые включают в себя сгибательные и разгибательные движения пальцев ноги, стопы, а также круговые вращения стопой;
  • по прошествии нескольких дней после травмы можно делать теплые ванночки, но нельзя использовать горячую воду. В ванночки можно добавлять морскую соль;
  • физиотерапевтические процедуры (электрофорез, парафиновые аппликации и т.п.).

Своевременное лечение будет способствовать быстрейшему выздоровлению, а также снизит вероятность развития серьезных осложнений.

Народная медицина

Народные средства – это эффективный, а главное, безопасный метод борьбы с ушибом. Все же стоит проконсультироваться с врачом перед использованием народных средств.

Рассмотрим популярные рецепты, которые дали хороший результат при повреждениях:

  1. нужно нагреть соль и поместить ее в мешочек, а затем приложить на поврежденное место;
  2. спиртовой компресс. Для его приготовления нужно взять водку, а также лекарственные травы: листья толокнянки, хвощ, спорыш, цветки василька, кукурузные рыльца и березовые почки. Травы следует измельчить и залить водкой. Настой нужно поставить в темное место на несколько дней, после чего процедить. Готовый компресс налаживаем на больное место на пару часов.

Не занимайтесь самолечением и постановкой собственных диагнозов. Лишь опытный специалист сможет провести дифференциальную диагностику ушиба с другими повреждениями. Поставить точный диагноз и назначить правильное лечение!

Диагностика и назначение лекарств требуют знания истории болезни и обследования врачом. Поэтому мы настоятельно рекомендуем по вопросам лечения и диагностики обращаться к врачу, а не заниматься самолечением.

Среди травм верхних конечностей достаточно часто случается ушиб и перелом кисти руки. Физиология человека устроена таким образом, что во время угрозы падения или удара инстинктивно происходит выставление рук вперед и их травмирование.

По Международной классификации болезней 10 пересмотра переломам запястья и кисти присвоен код МКБ-10 S.62. Причинами травм кисти становятся чрезмерные нагрузки и вынужденное неестественное положение руки, ушиб. Чаще всего встречается у спортсменов и людей со слабым костным скелетом.

Характеристика

Во время падения или удара возникает несколько вариантов травмирования. Это могут быть более распространенные переломы без смещения и со смещением и ушиб. Смещение встречается не так часто, но опасно возможными осложнениями и сложностью лечения.

Принято выделять три варианта переломов кисти:

  • Первый – костей запястья. По МКБ-10 присвоен код S.621. Встречается достаточно редко. Только травмирование ладьевидной кости более распространено.
  • Второй – пястной кости. Появляется чаще и по МКБ-10 разделяется на перелом первой, другой пястной кости и множественные переломы (код S62.2;62.3;62.4).
  • Третий – костей фаланг пальцев. Самый встречаемый вид переломов. По МКБ-10 классифицируется по кодам S62.4-62.7.

Перелом запястья руки относится к первой группе и встречается нечасто. Подразделяется на травмирование ладьевидной, полулунной, гороховидной костей сустава. Возникает из-за сильного удара кулаком или ребром ладони, падения при согнутой кисти и удара по самой ладони. Достаточно часто сочетается совместно с такими состояниями, как вывих, ушиб.

Вторая группа – это переломы пястных костей. Встречается повреждение первой пястной кости, возникающей при ударе с согнутым первым пальцем. Может возникнуть травма основания и средней части кости. Также выделяется травма второй-пятой пястных костей. Возникает при ударе или падении на кулак.

Третья группа представлена переломами фаланг пальцев. Встречается довольно часто. Причин, повлекших данное состояние пальцев, множество: удар, падение, ушиб, чрезмерный выгиб пальца.Возможны винтообразные, оскольчатые, вне- и внутрисуставные переломы.

Клиническая картина

Симптомы кистевого перелома зависят от степени поражения, локализации и наличия осложнений. Основное проявление кистевого перелома – это болевой синдром. Возникает сразу, нарастает со временем и зависит от поражения мягких тканей, нервов и кровеносных сосудов, сустава. Возникает хруст в месте поражения.

Кроме боли, характерна отечность сустава, ограничение подвижности кисти. При осмотре выявляется деформация поврежденного участка сустава и сильная боль при шевелении.

При закрытом переломе наблюдается посинение кожных покровов и невозможность шевелить пальцами. Особенно ярко выражаются симптомы после кистевого перелома со смещением. При открытой травме может возникнуть незначительное кровотечение и выпячивание осколка кости.

Перелом ладьевидной кости сопровождается отеком и сильной болью на стороне первого пальца. При нажатии на первый и второй пальцы болевые ощущения усиливаются. Поражение ладьевидной кости имеет наиболее яркую клиническую картину.

Травма полулунной кости сопровождается болью и отеком при нагрузке на третий и четвертый пальцы. Разогнуть кисть становится практически невозможно. Самый редкий перелом гороховидной кости сопровождается болью в лучезапястном суставе и мизинце. Сгибание мизинца и сжатие кисти затруднено.

Перелом пястных костей возникает немного чаще ладьевидной, и симптомы зависят от того, какая кость повреждена.

Перелом основания первой кости наблюдается чаще всего со смещением в сторону к лучевой кости или вывихом основного фрагмента. Возникают симптомы боли и отечности места травмирования.

При переломах второй-пятой костей нарушается возможность сжимать кулак из-за резкой боли. Возникает посинение и деформирование места травмирования и сустава кисти.

При переломах фаланг пальцев появляются такие симптомы:

  • отек пораженного пальца;
  • посинение;
  • резкая болезненность при нажатии и движении.

После возникновения травмы необходимо не затягивать с походом в травмпункт, так как наличие указанных симптомов может означать не только перелом, а и ушиб, растяжение или вывих. Тщательная диагностика позволит установить точный диагноз и определиться с будущим лечением.

Диагностика и лечение

Перелом костей кисти требует оказания первой доврачебной помощи. Когда травма достаточно сильная или есть подозрение на перелом со смещением, необходимо организовать покой поврежденной руке. После возникновения кровотечения следует защитить рану от проникновения грязи и инфекции. Для этого достаточно приложить бинт или другую ткань, смоченную спиртом, к месту кровотечения.

Илон Маск рекомендует:  Asp работа с языками сценариев

Следующий шаг – это приложение холода к месту повреждения. Лучшим вариантом будет лед, при его отсутствии любой замороженный продукт. Чтобы не получить эффект переохлаждения, холод необходимо завернуть в любую ткань и не допускать длительного держания. Если это ушиб, то болезненные ощущения достаточно быстро пройдут. При переломе начнет появляться отек.

При закрытой травме необходима фиксация кисти в одном положении и обращение за медицинской помощью. При сильном болевом синдроме допускается принятие анальгетиков в небольших дозировках.

Когда имеется открытая рана или угроза перелома со смещением, требуется вызвать «скорую медицинскую помощь» и не транспортировать больного самостоятельно. Чем меньше сроки с момента получения травмы до оказания первой помощи, тем больше шансов избежать осложнений.

До проведения полного обследования требуется воздержаться от лечения народными средствами в домашних условиях.

Для диагностики проводится первичный осмотр и рентгенография. Необходимо исключить ушиб и вывих сустава, так как при указанных состояниях не накладывается гипс. В случае возникновения осложнений или неординарной ситуации, проводится магнитно-резонансная томография.

Наиболее опасные травмы возникают со смещением ладьевидной, пястной кости. В таком состоянии проводится закрытая репозиция.

Выполняется под местной анестезией и включает в себя сопоставление отломков и устранение смещения.

Также показана открытая репозиция при одновременно нескольких переломах сустава, серьезном повреждении ладьевидной кости. После проведения процедуры требуется повторный рентген — контроль.

В остальных случаях чаще всего в проведении оперативных вмешательств нет необходимости.

Такие состояния устраняется консервативными способами, включающими медицинское наблюдение, курс реабилитации и лечение народными средствами.

По длительности процесс восстановления занимает в среднем от четырех до восьми недель. При поражении ладьевидной кости основной курс лечения длится до пятнадцати недель.

После оказания первой медицинской помощи и других вмешательств лечение основывается на обездвиживании поврежденного сустава. Накладывается гипсовая лонгета или бандаж. Это необходимо для правильного сращивания костей и восстановления функциональности сустава. После определенного времени может потребоваться снятие гипса для повторного рентген — исследования.

Профилактика и реабилитация

Спустя несколько недель после отмены иммобилизации сустава наступает период реабилитации, включающий проведение массажа, гимнастики и лечение народными средствами. Цель этих мероприятий — разработать сустав, вернуть ему подвижность и работоспособность.

Врач назначает физиотерапевтическое лечение и упражнения. Физиотерапевт подбирает определенную программу и дает наставления насчет лечения народными средствами. Необходимо помнить, что даже после прохождения курса лечения и реабилитации на длительное время останутся признаки наличия перелома.

Чтобы облегчить состояние после длительного обездвиживания, можно воспользоваться в качестве профилактики народными средствами: растирками, мазями, компрессами.

Опасность скальпированных ран и особенности локализации

Основная особенность, отличающая раневую поверхность патологии рвано скальпированная рана – отслойка лоскута кожи с мягкими тканями и подкожно-жировой клетчаткой от поверхности тела после нанесения травмирующей силой повреждения. Может быть полной с оголением раневой зоны или лоскут частично остается прикрепленным к телу.

  • неровные края по периметру скальпированной раны;
  • массивное кровотечение вследствие поражения сосудистых структур, вплоть до гиповолемического, болевого шока;
  • обширный участок отслоения подкожного слоя, не затрагивается мышечный слой, кости, суставы, отсутствует риск повреждения внутренних органов;
  • скальпировать кожу без занесения инфекции практически невозможно, поверхность инфицирована, риск образования экссудата высокий (скудный или обильный гнойный, серозный, геморрагический выпот);
  • время регенерации длительное, дефект значительный и заживление поверхностным натяжением фактически невозможно.

Наиболее часто поражается волосяная часть головы и лицо – оперировать данные участки можно при падении или аварии, согласно МКБ-10 код для открытого повреждения головы S08,0.

Более редко встречается скальпированная рана кисти код по МКБ 10 — S61.

Причины возникновения и особенности локализации

Причины поражений достаточно специфичны, что влияет на редкое появление таких ранений. Получить подобную травму в домашних условиях практически невозможно, скальпированные раны появляются с приложением большой силы или при несоблюдении техники безопасности.

Голова

Наиболее частое место повреждения – поражения области головы, так как снятие скальпа или сухожильного апоневроза (сухожильно-мышечный покров черепа) с волосистой части практиковалось у древних народов.

Заживление и восстановление после скальпированных ран очень длительный процесс, наиболее опасный для человека вследствие массивных кровотечений, заражения раневой поверхности (остеомиелит костей черепа, инфицирование мозговых оболочек).

Скальпирование кожи головы провоцируется при попадании волос в движущиеся механизмы:

  • колеса велосипеда или мотоцикла;
  • механизмы различных станков при наматывании волос на движущиеся, вращающиеся детали;
  • ДТП с образованием скальпированной раны повреждающими предметами (осколки стекла, металлические острые фрагменты автомобилей);
  • неосторожность использования бытовой техники (кухонные комбайны, электромиксеры, эпиляторы с вращающейся головкой).

Конечности

Ранения нижних, верхних конечностей (скальпированная рана голени, кисти, плеча или предплечья) может образовываться при воздействии этиологических факторов:

  • повреждение вследствие попадания руки или ноги под колеса автомобильного транспорта;
  • рабочие травмы производственного характера, когда работа связана с обслуживанием вращающихся механизмов, несоблюдение правил техники безопасности.

Повреждение других частей тела (скальпированная рана пальца, стопы, области спины или грудной клетки) – очень редкое явление в медицине, может возникать при неосторожности человека в сочетании с воздействием острых предметов:

  • ранение садовыми ножницами;
  • падение с велосипеда на асфальт;
  • нанесение раны ножом во время приготовления пищи.

Первая помощь при отрыве кожного лоскута

Оказание первой помощи человеку со скальпированной раной – залог дальнейшего успешного лечения, именно своевременное выполнение необходимых действий может спасти жизнь человеку до приезда скорой.

Алгоритм доврачебной помощи состоит из следующих положений:

  1. Соблюдение спокойствия, оказание психологической поддержки пострадавшему для уменьшения проявлений паники, обеспечить покой, придать удобное положение тела с исключением нагрузки на скальпированный участок.
  2. Гемостаз – остановка кровотечения. В зависимости от пораженной области пострадавшему накладывают жгут или давящую повязку из подручных средств (одежда, куски ткани, полотенца). При полном отслоении кожи, мягких тканей необходимо поместить оторвавшийся лоскут в пакет со льдом, который далее врач определяет для восстановления кожного покрова (операция по репозиции кожного лоскута и восстановления целостности тканей).
  3. Обеспечение адекватного обезболивания раны, недопустимо состояние болевого шока, которое угрожает жизни больного. Дать человеку обезболивающие препараты: Анальгин, Нурофен, Кетанов. Более сильные анальгезирующие препараты (Трамадол, Омнопон, Фентанил) применяют уже медработники.
  4. Необходимо вызвать бригаду скорой или самостоятельно отвезти пострадавшего в отделение хирургии, травматологии ближайшего медицинского учреждения для оказания квалифицированной помощи.

Как показывает медицинская статистика большинство людей, получивших скальпированные травмы в результате каких-либо несчастных случаев, в том числе и при повреждениях головы, могли бы быть спасены в том случае, если бы получили своевременную и квалифицированную помощь.

Конечно, вид подобных ран пугает очень многих и люди просто боятся даже подойти к пострадавшему человеку, но на самом деле оказать помощь при подобных повреждениях не представляет особенной сложности.

Важно соблюдать спокойствие: необходимо справиться с собственной паникой, шоком, подавить смятение и страх, поскольку предельное внимание должно быть направлено на пострадавшего и оказание ему помощи до приезда врачей.

Скорую помощь в таких ситуациях необходимо вызывать сразу же, объяснив врачам особенности происшествия и полученных человеком ранений и только после этого приступать.

Разговаривать с приемным отделением скорой можно по ходу проведения осмотра человека.

Важным моментом является остановка кровотечения, которой необходимо уделить самое пристальное внимание. Кровотечения при скальпированных ранах всегда очень обильные, выраженные и нередко просто ужасающие, но остановить этот процесс необходимо любой ценой.

В большинстве ситуаций наложение жгута является недопустимым, а часто просто нецелесообразным, например, в случае скальпированной раны на голове, поэтому лучше всего останавливать кровотечение с помощью наложения тугих и давящих повязок.

Если у пострадавшего имеется полный отрыв части кожного покрова и подкожной клетчатки, и этот лоскут находится в поле зрения человека, оказывающего первую доврачебную помощь, его необходимо поместить в чистый полиэтиленовый пакет, положив туда лед, и обязательно передать сотрудникам скорой помощи, которым будет передан и пострадавший. При поступлении человека в стационар хирургии доктора определят целесообразность пришивания его на место.

Важно помнить и о том, что пострадавший при получении таких ран, всегда испытывает сильнейший и очень выраженный болевой шок, который может привести даже к состоянию комы, поэтому оставлять человека без обезболивающего никак нельзя. Разрешается дать пострадавшему хотя бы самое простое обезболивающее средство, продающееся в ближайшей аптеке.

Обособленное (без поражения синовиального канала) воспаление сухожилий чаще всего наблюдается в области лучезапястного сустава, сочленяющего кисть с предплечьем. Воспаление сухожилий этой области называется стилоидитом.

Воспаление других сухожилий (и не только кисти руки) называют тендинитом. Ввиду того, что человек активно пользуется кистями рук, совершая перемещение тяжестей или мелкие точные движения, их сухожилия подвергаются значительным нагрузкам и, нередко, травмам, что способствует развитию воспалительного процесса.

Введение в графические функции. Организация вывода в виртуальное окно / Основы программирования с помощью библиотеки MFC / Visual C++

В Windows имеется большой набор графических функций, предназначенных для векторной графики. В этой главе мы рассмотрим только введение в графическую систему и несколько простых функций. Тем не менее, изучив основы в этой главе, Вы всегда сможете легко изучить в дальнейшем нужные Вам графические функции.

Также мы рассмотрим самый удобный способ решения проблемы перерисовки окна по сообщению WM_PAINT — использование виртуального окна. Мы не использовали этот метод раньше, чтобы не загромождать примеры программ второстепенными деталями.

Система графических координат

При работе с графикой используется та же система координат, что и при работе с текстом. Это означает, что по умолчанию левый верхний угол окна имеет координаты (0,0), а логические единицы являются пикселями.

В Windows используется так называемый текущий указатель, положение которого используется и изменяется некоторыми графическими функциями. При запуске программы он устанавливается в точку (0,0). Его местоположение на экране невидимо, он означает лишь позицию в окне для некоторых функций.

Перья

Графические объекты рисуются с помощью текущего пера. В MFC перья описываются с помощью класса CPen. По умолчанию установлено черное перо толщиной в 1 пиксель. Всего имеется три стандартных пера: черное, белое и нулевое (прозрачное). Конечно, этого недостаточно. Поэтому обычно создаются собственные перья. Для этого нужно вызвать функцию : Параметр Style определяет стиль созданного пера. Толщина пера в логических единицах задается параметром Width. Цвет пера задается с помощью параметра Color. Класс CPen также имеет перегруженный конструктор с такими же параметрами. Иногда легче использовать его.

Кисти

Кисти создаются подобно перьям. Только они описываются классом CBrush. Существуют различные стили кистей. Наиболее распространенным является стиль сплошной кисти. Такие кисти создаются с помощью функции: Параметр задает цвет кисти. Класс также имеет конструктор с таким же параметром, позволяющий сразу создать кисть.

Следующие функции позволяют создать также кисти со штриховкой и кисти по шаблону битового образа: Параметр Index указывает стиль кисти. Параметр pBitmap — это указатель на объект битового образа. Предварительно он может быть загружен из ресурсов. Битовый образ должен иметь размер 8х8.

Мы будем использовать все эти функции в примере программы.

Отображение точки

Отобразить в контексте устройства точку определенного цвета можно с помощью следующей функции: Функция отображает точку заданного цвета по указанным координатам. Она возвращает цвет, который был установлен в действительности. Он может отличаться от заданного, из-за округления до ближайшего цвета, поддерживаемого текущим видеорежимом.

Рисование прямоугольников

Для рисования прямоугольников текущим пером используются функции: Первая функция рисует обычный прямоугольник, а вторая — прямоугольник со скругленными углами. Параметры curveX и curveY задают ширину и высоту эллипса, определяющего дугу для скругленных углов. Нарисованные фигуры автоматически заполняются с помощью текущей кисти контекста устройства.

Рисование эллипсов

Для рисования эллипсов текущим пером используется функция: Координаты (upX, upY) и (lowX, lowY) задают левый верхний и правый нижний углы прямоугольника, в который будет вписан эллипс. Если нужно нарисовать окружность, то задается описанный квадрат. Специальной функции для рисования окружностей нет.

Фигура заполняется с помощью текущей кисти контекста устройства.

Организация виртуального окна

В примере программы, который мы будем рассматривать, в окне рисуется много разных фигур. Возникает проблема восстановления содержимого окна по сообщению WM_PAINT. Запоминать нарисованные фигуры и затем рисовать их заново очень трудно, а в общем случае и невозможно. Поэтому самый удобный метод для решения проблемы перерисовки — выводить графику в память, а при получении сообщения WM_PAINT просто копировать эту область памяти в контекст окна.

Дополнительные функции

Для реализации виртуального окна нужно использовать некоторые еще не рассмотренные нами функции MFC.

Функция с прототипом: создает растровое изображение совместимое с указанным контекстом устройства. Впоследствии оно может быть использовано с любым контекстом памяти, совместимым с контекстом данного устройства. Два последних параметра определяют размер изображения.

Следующая нужная нам функция: заполняет текущей кистью прямоугольную область с указанными начальными координатами и размером. Последний параметр определяет растровую операцию, аналогично функции BitBlt(). Нам будет нужно значение PATCOPY.

Создание виртуального окна

Для этого в примере программы используется следующий код: Сначала определяются размеры экрана. Затем для текущего окна запрашивается контекст устройства, который используется для создания совместимого контекста области памяти. После этого создается совместимый битовый образ. Размеры изображений устанавливаются такими же, как и размеры экрана. Это дает уверенность, что изображение в виртуальном окне будет достаточно большим, независимо от размеров реального окна. Следующим шагом создается стандартная черная кисть, которая затем используется для очистки виртуального окна.

Использование виртуального окна

Использование созданного нами контекста памяти ничем не отличается от использования контекста окна, что мы уже неоднократно делали. При получении сообщения WM_PAINT в обработчике выполняется следующий код: Он копирует содержимое виртуального окна на экран. Обратите внимание, что копируется только часть изображения, в соответствии с размерами клиентской области.

Что такое код createhatchbrush

Поскольку для рисования различных графических примитивов применяются аналогичные алгоритмы, мы рассмотрим лишь два типичных примера. В первом на экран выводится толстая черная диагональная линия:

рисование толстой черной диагональной линии newpen. CreatePen(PS SOL >

dc.TextOut (70, 20, odiagonal line , 15); удаление пера dc.SelectObject (oldpen) ; newpen. DeleteObject() ;

Объект пера создается функцией CreatePen() которая задает рисование черных сплошных линий толщиною в шесть логических единиц. Сразу после этого функция SelectObject() загружает созданный объект в контекст устройства и возвращает указатель на предыдущий объект пера. Функции Moveто() и LineTo() формируют линию, которая рисуется выбранным пером. Наконец, функция Textout() выводит надпись рядом с нарисованной фигурой. В завершение снова вызывается функция Selectobject(), которая восстанавливает прежнее перо, а функция DeleteObject() удаляет ненужное перо.

Работа с кистями организуется аналогичным образом. В следующем фрагменте кода создается кисть с заливкой горизонтальными и вертикальными штрихами (hs cross) синего цвета.

рисование черного закругленного прямоугольника и заливка его синим цветом

Рисование заполненных фигур

Следующая группа функций предназначена для отображения заполненных фигур. К таким фигурам относятся прямоугольники, прямоугольники со скругленными краями, эллипсы, сектора, дуги, стянутые хордой и многоугольники. Условно можно представить себе рисование заполненных фигур как процесс, состоящий из двух этапов — рисование контура текущим пером и заполнение фона. При рисовании контура справедливы все замечания, сделанные при обсуждении рисования линий. Если вам не надо рисовать контур, то выберите в контекст устройства прозрачный карандаш (функция GetStockObject или макрос GetStockPen, NULL_PEN). При заполнении фона рисуемой фигуры используются как уже рассмотренные атрибуты GDI, так и несколько новых. Естественно, что перед рисованием нужной вам фигуры вы должны установить требуемые значения атрибутов контекста устройства.

Кисть (Brush).

Кисть используется как для закраски внутренней области замкнутых фигур, так и для закраски внутренней области окна. Если фон фигуры заполнять не надо, то установите прозрачную кисть. Фактически кисть представляет собой маленький, 8×8 пиксель битмап, который многократно повторяется при заполнении указанной области. Кисть может быть как однотонной (все точки кисти имеют одинаковый цвет), так и штрихованной или узорчатой. Для штрихованных кистей определяется только цвет штрихов; цвет промежутков между штрихами определяется непосредственно при закраске области.

Цвет фона (Background Color).

При закраске областей штрихованными кистями, кисть определяет только лишь цвет штрихов, а промежутки между штрихами заполняются текущим цветом фона.

Илон Маск рекомендует:  Что такое код asp filterdescription

Режим заполнения фона (Background Mode).

Определяет, надо-ли закрашивать промежутки между линиями штрихованных кистей цветом фона или оставить фон без изменений.

Режим рисования (Drawing Mode).

Определяет операцию, выполняемую в процессе переноса формируемого изображения на контекст устройства.

Направление рисования эллипсов (Arc Direction).

Влияет на способ задания начальной и конечной точек дуг, образующих сектора или дуги, стянутые хордой.

Режим заполнения многоугольников (Polygon Filling Mode).

При рисовании заполненных многоугольников вы можете задать многоугольник такой формы, что он будет содержать накладывающиеся друг на друга элементы. GDI предлагает два разных алгоритма, вычисляющих конфигурацию закрашиваемой области. С помощью данного атрибута вы можете выбрать более подходящий вам алгоритм.

Большинство перечисленных здесь атрибутов GDI уже рассмотрено в разделе «Рисование линий», так что повторно обсуждаться они не будут. Ниже отдельно вынесено обсуждение двух новых атрибутов: кисть и режим заполнения многоугольников.

Функции для рисования заполненных фигур

Среди всех функций, рисующих заполненные объекты, можно условно выделить группу функций, для выполнения которых вы должны задать описывающий рисуемый объект прямоугольник. К таким функциям относятся функции по рисованию прямоугольника (Rectangle), прямоугольника со скругленными краями (RoundRect), эллипса (Ellipse), а также функции для рисования сектора (Pie) и дуги, стянутой хордой (Chord). Все эти функции требуют задания либо непосредственно рисуемого прямоугольника, либо прямоугольника, в который будет вписан рисуемый объект (прямоугольник со скругленными углами, весь рисуемый эллипс или эллипс, дуга которого используется для рисования сектора или стягивается хордой).

При задании описывающего прямоугольника необходимо учитывать несколько нюансов:

Во-первых, по умолчанию нижняя и правая границы описывающего прямоугольника не включаются в рисуемый объект, однако в случае Win32 API и установленного расширенного режима границы описывающего прямоугольника полностью включаются в рисуемый объект (функция SetGraphicsMode, GM_ADVANCED, дополнительно см. раздел «Глобальные системы координат GDI (Win32 API)»).

Во-вторых, рисуемый объект может выходить за рамки описывающего прямоугольника, если для обведения контура используется перо, ширина которого превышает одну единицу устройства и это перо не стиля PS_INSIDEFRAME. Линия стиля PS_INSIDEFRAME всегда будет находиться внутри описывающего прямоугольника.

В-третьих, ориентация сторон описывающего прямоугольника всегда параллельна осям координат и, соответственно, предусмотренные функции не могут рисовать наклонных прямоугольников и эллипсов, что является существенным неудобством. Единственное возможность — при использовании Win32 API перейти в расширенный режим и наклонить сами оси координат (см. раздел «Глобальные системы координат GDI (Win32 API)»).

Обзор функций мы начнем с рисования прямоугольников и эллипсов. Сделать это можно с помощью трех разных функций.

BOOL Rectangle (hDC, xLeft, yTop, xRight, yBottom);

BOOL Ellipse (hDC, xLeft, yTop, xRight, yBottom);

BOOL RoundRect (hDC, xLeft, yTop, xRight, yBottom, xRound, yRound);

Функция Rectangle рисует прямоугольник с прямыми углами, а функция RoundRect скругляет эти углы, проводя небольшие дуги. Эти функции используют описывающий прямоугольник, координаты которого задаются в качестве параметров, причем для функций Rectangle и RoundRect этот прямоугольник задает непосредственно рисуемый объект, а для функции Ellipse он задает описывающий прямоугольник. Функция RoundRect дополнительно требует задания величины эллипсов, которыми она будет скруглять углы. При этом надо учитывать, что задаются размеры описывающего скругляющий эллипс прямоугольника, а не его радиусы. То есть в каждом углу скругляющая дуга будет занимать только половину от указанных вами значений.

Рисунок 7. Задание величины скругляющих эллипсов для функции RoundRect.

Теперь осталось рассмотреть пару функция для рисования сектора (Pie), то есть дуги и области, ограниченной двумя радиусами и для рисования дуги, стянутой хордой (Chord).

Рисунок 8. Результат выполнения функций Pie (слева) и Chord (справа).

BOOL Pie (hDC, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);

BOOL Chord (hDC, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);

При использовании этих функций надо помнить о направлении рисования дуги (в Windows API вы можете задавать это направление, а в Win32 API в расширенном графическом режиме оно всегда против часовой стрелки), о задании начальной и конечной точек дуги и об особенностях задания ограничивающего прямоугольника.

Еще две функции, использующиеся для рисования ограниченных фигур, позволяют рисовать многоугольники.

BOOL Polygon (hDC, lpPoints, nCount);

BOOL PolyPolygon (hDC, lpPoints, lpCounts, nPolyCount);

Функция Polygon рисует текущим карандашом ломаную линию, имеющую указанное параметром nCount число точек с координатами, заданными массивом структур типа POINT, который задается параметром lpPoints (аналогично функции PolyLine — см. раздел «Рисование линий»). В отличие от PolyLine, функция Polygon замыкает многоугольник и закрашивает его внутреннюю область текущей кистью. Так как многоугольник может быть достаточно сложным, и некоторые его области могут перекрываться, то GDI предусматривает два различных алгоритма вычисления внутренней, закрашиваемой области. Применяемый алгоритм определяется атрибутом контекста устройства, называемым режим заполнения многоугольников (polygon filling mode) — см. ниже.

Функция PolyPolygon позволяет нарисовать несколько многоугольников за одну операцию. При этом указывается массив, содержащий координаты всех точек всех многоугольников последовательно друг за другом, массив, содержащий числа точек в каждом из многоугольников и число рисуемых многоугольников.

В Windows существует специальный объект GDI, используемый для закраски внутренних областей фигур; по аналогии с рисованием на бумаге этот объект получил название кисть (brush). Практически кисть представляет собой небольшую (8×8 пикселей) картинку, которая многократно воспроизводится для закраски указанной области.

Кисть является объектом GDI и, соответственно, при работе с ней надо придерживаться общих правил работы с объектами GDI.

Windows содержит несколько стандартных кистей, для выбора которых можно воспользоваться функцией:

HANDLE GetStockObject (nIndex);

HBRUSH GetStockBrush (nIndex); 2

где параметр nIndex может быть:

— кисть черного цвета

— прозрачная кисть (синоним символа HOLLOW_BRUSH)

Белая кисть (WHITE_BRUSH) обычно используется для закраски фона окна (при описании класса окна поле WNDCLASS.hbrBackground задается обычно равным хендлу белой кисти).

В принципе, вы можете задать любую другую кисть для закраски внутренней области окна, либо изменив регистрацию класса окна, либо, уже после регистрации и создания окна (окон) этого класса, воспользовавшись функцией:

UINT SetClassWord (hWnd, GCW_HBRBACKGROUND, hbrNewBrush); // Windows 3.x

DWORD SetClassLong (hWnd, GCL_HBRBACKGROUND, hbrNewBrush); // Win32 API

которая изменит кисть, применяемую для закраски фона окна, на другую. При этом надо учитывать, что измениться кисть для всех окон, принадлежащих этому классу, так что вам надо принять специальные меры для перерисовки всех окон этого класса после изменения кисти.

Кисти HOLLOW_BRUSH и NULL_BRUSH представляют один и тот же объект — прозрачную кисть. Вы можете использовать данную кисть для закраски фона замкнутых фигур, если они должны быть представлены только контуром, без заполнения внутренней области.

Если вы хотите создать собственную кисть, то можно воспользоваться одной из следующих функций:

HBRUSH CreateSolidBrush (crColor);

HBRUSH CreateHatchBrush (nStyle, crColor);

HBRUSH CreatePatternBrush (hBitmap);

HBRUSH CreateDIBPatternBrush (hGlobDIB, nColorSpec);

HBRUSH CreateBrushIndirect (lpLogBrush);

Функция CreateSolidBrush позволяет создать однотонную кисть. В качестве параметра указывается цвет создаваемой кисти. В том случае, если система не может воспроизвести указанный цвет чистым, то GDI будет использовать смешивание разноцветных пикселей для получения наиболее точного приближения к заданному цвету.

Так, например, в 16 ти цветном режиме стандартные кисти LTGRAY_BRUSH, GRAY_BRUSH и BLACK_BRUSH могут быть представлены оттенками серого цвета, а кисть DKGRAY_BRUSH будет представлена смесью точек серого и черного цветов.

Функция CreateHatchBrush создает штрихованную кисть. Вы указываете два параметра — тип штриховки (nStyle) и цвет штриха (crColor), для закраски фона между штрихами в качестве фона используются атрибуты контекста устройства текущий цвет фона и режим заполнения фона.

Рисунок 9. Стили штрихованных кистей

Параметр crColor задает цвет штриховки. GDI будет применять ближайший чистый цвет для рисования линий штриховки. Для задания цвета фона надо воспользоваться функциями

COLORREF SetBkColor (hDC, crColor);

int SetBkMode (hDC, nMode);

С помощью функций CreatePatternBrush и CreateDIBPatternBrush вы можете описать кисть, определяемую образцом (pattern) — рисунком размером 8×8 пикселей. Для этого надо предварительно получить битмап размером 8×8 пикселей (или больше) и передать его соответствующей функции. Кисть будет создана исходя по изображению размером 8×8 пикселей, находящемуся в верхнем-левом углу битмапа. Подробнее о получении битмапов — смотри в разделе “Растровые изображения”. Все время, пока существует кисть, вы должны сохранять исходный битмап, по которому эта кисть построена. Один битмап может применяться для создания многих кистей.

Разница между двумя функциями создания кисти по образцу связана с применением разных видов битмапов — зависимых от устройства (DDBdevice depended bitmap) и независимых от устройства (DIBdevice independed bitmap). Независимый от устройства битмап содержит как данные об изображении, так и данные о применяемых цветах (палитре). При создании кисти на основе DIB требуется два параметра, один из которых указывает образец (независимый от устройства битмап), а другой указывает правила интерпретации логических цветов данного битмапа.

К этим двум функциям создания кисти по образцу надо сделать еще одно замечание: если битмап является монохромным, то тогда GDI будет представлять его не в виде черно-белого изображения, а использовать текущий цвет текста вместо цвета (1) и текущий цвет фона вместо цвета (0). Таким образом картинка оказывается как-бы негативной — точки, кодированные 1, по умолчанию представляются черными (цвет текста), а 0 — белыми (цвет фона).

Функция CreateBrushIndirect является объединением всех рассмотренных функций: в качестве параметра ей передается указатель на структуру типа LOGBRUSH, которая описывает кисть любого типа.

typedef struct tagLOGBRUSH <

Поле lbStyle определяет стиль кисти. Оно может принимать одно из следующих значений: BS_SOLID, BS_HATCHED, BS_HOLLOW, BS_NULL, BS_PATTERN и BS_DIBPATTERN (что в какой-то мере соответствует функции, применяемой для создания кисти). Использование других полей структуры LOGBRUSH зависит от стиля кисти:

Эквивалентная функция, применяемая для создания кисти

Инструмент Brush

Дата добавления: 2015-01-16 ; просмотров: 697 ; Нарушение авторских прав

Объект кисть – это битовый образ, свойства которого распространяются в горизонтальном и вертикальном направлениях при закрашивании области.

Имеется шесть стандартных (Stock) кистей: WHITE_BRUSH – белая, LTGRAY_ BRUSH – светло-серая, GRAY_ BRUSH – серая, DKGRAY_ BRUSH – темно-серая, BLACK_ BRUSH – черная и NULL_ BRUSH (HOLLOW) – пустая кисть.

Выбрать одну из стандартных кистей в контекст устройства можно аналогично выбору пера, определив переменную типа описателя кисти HBRUSH hBrush; получаем описатель кисти, например, GRAY_BRUSH:

hBrush = GetStockObject (GRAY_BRUSH);

Выберем эту кисть в контекст устройства:

SelectObject (hdc, hBrush);

Теперь внутренняя область рисуемых фигур будет закрашиваться серым.

Если необходимо нарисовать фигуру без рамки, выберем перо NULL_PEN:

SelectObject (hdc, GetStockObject (NULL_PEN));

А если только контур фигуры без закрашивания внутренней области, выберем кисть NULL_BRUSH:

SelectObject (hdc, GetStockObject (NULL_BRUSH));

Для создания сплошной (Solid) логической кисти:

hBrush = CreateSolidBrush (rgbColor);

Для создания штриховой (Hatch) кисти, состоящей из горизонтальных, вертикальных или диагональных линий:

hBrush = CreateHatchBrush (iHatchStyle, rgbColor);

параметр iHatchStyle – стиль штриховки: HS_HORIZONTAL, HS_VERTICAL, HS_BDIAGONAL – диагональная слева направо вверх; HS_FDIAGONAL – диагональная слева направо вниз; HS_CROSS – прямая сетка; HS_DIAG­CROSS – диагональная сетка; в обеих функциях rgbColor – цвет штриховых линий.

Промежутки между штриховыми линиями закрашиваются в соответствии с режимом и цветом фона, если режим фона – OPAQUE, то цвет фона используется для закрашивания промежутков между штриховыми линиями, если режим фона – TRANSPARENT, то промежутки между штриховыми линиями не зарисовываются.

Можно создавать кисти, основанные на битовых шаблонах, используя функцию CreatePatternBrush:

hBrush = CreatePatternBrush (hBitmap);

Функция, включающая три рассмотренные ранее функции, строящие кисти:

hBrush = CreateBrushIndirect (&logbrush);

переменная logbrush – структура типа LOGBRUSH («логическая кисть» – logical brush), содержащая поля:

UINT lbStyle – стиль кисти: BS_SOLID – сплошная; BS_HOLLOW, BS_NULL – «пустая» (невидимая); BS_HATCHED – штрихованная; BS_PATTERN, BS_PATTERN8X8 – задаются битовой картой; BS_DIB­PATTERN, BS_DIBPATTERN8X8, BS_DIBPATTERNPT – задаются битовой картой DIBWindows 95 размер шаблона ограничен 8´8 точек);

COLORREF lbColor – цвет кисти, для пустой или «шаблонной» кисти игнорируется, для кистей с DIB-шаблоном младшее слово определяет, следует ли интерпретировать его цвета как заданные цветовыми компонентами (DIB_RGB_COLORS) или как палитровые (DIB_PAL_COLORS).

Значение поля lbStyle определяет, как интерпретируются другие поля:

lbStyle lbColor lbHatch
BS_SOLID Цвет кисти Игнорируется
BS_HOLLOW Игнорируется Игнорируется
BS_HATCHED Цвет штриховых линий Стиль штриховки
BS_PATTERN Игнорируется Описатель битового шаблона

Получить описатель логической кисти: SelectObject (hdc, hBrush);

Удалить созданную кисть: DeleteObject (hBrush);

Получить информацию о кисти:

GetObject (hBrush, sizeof (LOGBRUSH), &logbrush);

Delphi

Наши проекты

Автор: Акулов Николай

Выводит код и напpавляет тpассиpовку на вспомогательный поpт компьютеpа. Пользователю задается вопpос о дальнейших действиях. Используется только для задач отладки.

Code: Отобpажаемый код ошибки.

Заполняет пpямоугольник, используя кисть Brush, до пpавой и нижней гpаниц.

DC: Идентификатоp контекста устpойства.

Rect: Заполняемый TRect.

Brush: Кисть заполнения.

См. также: CreateHatchBrush, CreatePatternBrush, CreateSolidBrush, GetStockObject

Функция находится в файле user32.dll

Заполняет область, используя кисть Brush.

DC: Идентификатоp контекста устpойства.

Rgn: Заполняемая область.

Brush: Кисть заполнения.

Не нуль в случае успешного завеpшения; нуль — в пpотивном случае.

Функция находится в файле gdi32.dll

Ищет в таблице атомов атом, связанный с Str.

Str: Стpока поиска.

Атом, связанный с Str; 0 — если атом в таблице не найден.

Функция находится в файле kernel32.dll

Находит pесуpс в файле pесуpсов.

Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит pесуpс.

Name: Имя pесуpса либо стpока, заканчивающаяся пустым символом, или целочисленный идентификатоp.

ResType: Одна из следующих констант, указывающая тип pесуpса: rt_Accelerator, rt_Bitmap, rt_Cursot, rt_Dialog, rt_Font, rt_FontDir, rt_Icon, rt_Menu, rt_RCData, rt_String, стpока, заканчивающаяся пустым символом, или целочисленный идентификатоp. См. pаздел «Типы pесуpсов, rt_» в главе 1.

Идентификатоp pесуpса; 0 — если pесуpс не найден.

Функция находится в файле kernel32.dll

Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName. Не осуществляет поиск дочеpних окон.

ClassName: Имя класса окна (заканчивающееся пустым символом, nil — если все классы).

WindowName: Текстовый заголовок окна или 0, если все окна.

Описатель окна; 0 — если такого окна нет.

Функция находится в файле user32.dll

Делает окно или пиктогpамму мигающими. Активное состояние откpытого окна инвеpтиpуется.

Wnd: Окно, котоpое делается мигающим.

Invert: Не нуль, если мигание, 0 — для возвpата к исходному состоянию (для пиктогpамм игноpиpуется).

Не нуль, если окно до вызова было активным; 0 — в пpотивном случае.

Функция находится в файле user32.dll

Заполняет область отобpажения текущей кистью, огpаниченной Color.

DC: Идентификатоp контекста устpойства.

X, Y: Позиция начала заполнения.

Color: Цвет гpаницы, TColorRef.

Не нуль в случае успешного завеpшения; 0 — в пpотивном случае.

Функция находится в файле gdi32.dll

Очищает очеpедь пpиема или пеpедачи устpойства связи.

Cid: Очищаемое устpойство связи.

Queue: 0 — если очищается очеpедь пеpедачи; 1 — если очищается очеpедь пpиема.

Нуль в случае успешного завеpшения; 0 — пpотивном случае.

См. также: OpenComm

Рисует вокpуг пpямоугольника гpаницу шиpиной в одну логическую единицу.

DC: Идентификатоp контекста устpойства.

Rect: TRect, опpеделяющий углы пpямоугольника.

Brush: Кисть для pисования pамки.

См. также: CreateHatchBrush, CreatePatternBrush, CreateSolidBrush

Функция находится в файле user32.dll

Рисует гpаницу вокpуг области.

DC: Идентификатоp контекста устpойства.

Rgn: Очеpчиваемая область.

Brush: Кисть для pисования pамки.

Width: Шиpина гpаницы в мазках кисти по веpтикали (логические единицы).

Height: Высота гpаницы в мазках кисти по гоpизонтали (логические единицы).

Не нуль — в случае успешного завеpшения; 0 — в пpотивном случае.

Функция находится в файле gdi32.dll

Делает недействительным LibModule и освобождает связанную с ним память, если модуль больше не адpесуется.

LibModule: Загpуженный библиотечный модуль.

Функция находится в файле kernel32.dll

Делает недействительным Module и освобождает связанную с ним память, если модуль больше не адpесуется.

Module: Идентификатоp загpуженного модуля.

Освобождает адpес экземпляpа пpоцедуpы функции.

Proc: Освобождаемый адpес экземпляpа пpоцедуpы функции.

См. также: MakeProcInstance

Делает недействительным ResData и освобождает связанную с ним память, если pесуpс больше не адpесуется.

ResData: Идентификатоp pесуpса данных.

Нуль в случае успешного завеpшения; не нуль — в пpотивном случае.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL