Я использую MFC (но это также относится к Win32), и у меня есть представление, которое я хочу рисовать. Поэтому я переопределяю метод OnDraw. Вот немного psuedocode, я кодирования:Как создать контекст устройства суб-прямоугольника для рисования на
void OnDraw(DC* pDC)
{
foreach(Node n in nodes)
{
n->DrawOnCanvas(pDC)
}
}
Я думал, что это было хорошее решение OO. Но я столкнулся с проблемой. Теперь я хочу нарисовать границу вокруг исходного DC, но я не хочу, чтобы узлы знали об этом. Я хочу, чтобы узлы все еще рисовали относительно полного размера холста, начиная с 0,0 (и не знали о смещении). Если я дам узлам знания о границе в родительском окне, это кажется беспорядочным.
Как вы решаете такие проблемы? Как я могу определить новый DC, который по сравнению с существующим?
Хитрость состоит в том, чтобы передать весь прямоугольник чертежа каждому узлу, но перед тем, как сделать это, скопируйте «недопустимый» прямоугольник DC на уменьшенный размер. Это позволяет узлам рисовать на полный прямоугольник и оставляет GDI для вырезания битов, которые будут перезаписывать границу. Функции поиска, такие как 'CDC :: Set/GetBoundsRect' и' CDC :: ExcludeClipRect'. – user1793036
Я никогда не видел этих функций раньше, и после небольшой игры я не мог заставить их делать что-нибудь полезное. Это выглядит действительно интересно, есть ли у вас образец кода? – DanDan