Ватсон Карли
Шрифт:
До сих пор все хорошо. А что произойдет, когда перекрывающее окно (в данном случае Task Manager) будет удалено, так что окно
В таком случае фигуры не нужно перерисовывать. Причина этого связана с контекстом устройства. Ранее говорилось, что контекст устройства внутри объекта
Вследствие этого запрос экземпляра
Сначала необходимо получить данные области вырезания. Для этого используется дополнительное свойство
Затем надо решить, какой тест будет использоваться для рисования. Здесь будет использован простой тест. Отметим, что прямоугольник и эллипс полностью содержатся внутри прямоугольника, который простирается в клиентской области от точки (0, 0) до точки (80, 130), в действительности до точки (82, 132), так как мы знаем, что линии могут отклоняться примерно на пиксель вне этой области. Поэтому будем проверять, что верхний левый угол области вырезания находится внутри этого прямоугольника. Если это так, то выполняется рисование. Если нет, то ничего не делается. Код выглядит следующим образом:
Заметим, что изображение получится точно таким же, как и раньше, но производительность повысится благодаря раннему выявлению некоторых случаев, когда ничего не должно рисоваться. Отметим также, что мы выбрали достаточно примитивный тест необходимости рисования, более точный тест мог бы проверять по отдельности, нужно ли рисовать прямоугольник или эллипс, или оба объекта. Здесь существует некоторое балансирование. Можно сделать проверку в
Измерение координат и областей
В последнем примере мы встретили базовую структуру
Структура | Основные открытые свойства |
---|---|
struct Point | X, Y |
struct PointF | X, Y |
struct Size | Width, Height |
struct SizeF | Width, Height |
struct Rectangle | Left, Right, Top, Bottom, Width, Height, X, Y, Location, Size |
struct RectangleF | Left, Right, Top, Bottom, Width, Height, X, Y, Location, Size |