2

我正在使用 MFC(但这也适用于 Win32)并且我有一个想要绘制的视图。所以我重写了 OnDraw 方法。这是一些伪代码,我正在这样编码:

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

我认为这是一个不错的 OO 解决方案。但是我遇到了一个问题。我现在想在初始 DC 周围画一个边界,但我不希望节点知道这一点。我希望节点仍然相对于从 0,0 开始的完整画布大小进行绘制(并且不知道偏移量)。如果我向节点提供有关父窗口中边框的知识,它似乎很混乱。
你如何解决这样的问题?如何定义相对于现有 DC 的新 DC?

4

1 回答 1

3

您不会创建新的 DC,而是将原点设置在现有的 DC 上。所以在你的循环中,在 DrawOnCanvas() 之前,你会使用 CDC::SetViewportOrg() 和朋友。请参阅http://msdn.microsoft.com/en-us/library/46t66w7t.aspx。您也可以通过这种方式实现缩放、滚动等。

于 2014-02-05T11:39:15.633 回答