Как создать контекст устройства прямоугольника для рисования на

Я использую MFC (но это также относится к Win32), и у меня есть представление, которое я хочу нарисовать. Поэтому я переопределяю метод OnDraw. Вот немного psuedocode, я кодирую так:

void OnDraw(DC* pDC)
{
  foreach(Node n in nodes)
  { 
    n->DrawOnCanvas(pDC)
  }
}

Я думал, что это было хорошее ОО решение. Но я столкнулся с проблемой. Теперь я хочу нарисовать границу вокруг начального DC, но я не хочу, чтобы узлы знали об этом. Я хочу, чтобы узлы по-прежнему рисовались относительно полного размера холста, начиная с 0,0 (и не знали о смещении). Если я даю узлам информацию о границе в родительском окне, это кажется грязным.
Как вы решаете подобные проблемы? Как я могу определить новый DC относительно существующего?

1 ответ

Решение

Вы не делаете новый DC, вы устанавливаете источник на существующий. Таким образом, в вашем цикле, перед DrawOnCanvas(), вы будете использовать CDC::SetViewportOrg() и друзей. См. http://msdn.microsoft.com/en-us/library/46t66w7t.aspx. Вы также можете реализовать масштабирование, прокрутку и т.д.

Другие вопросы по тегам