我正在使用MFC(但这也适用于Win32)并且我有一个我想要绘制的视图。所以我重写了OnDraw方法。这里有一些伪代码,我编码是这样的:
void OnDraw(DC* pDC)
{
foreach(Node n in nodes)
{
n->DrawOnCanvas(pDC)
}
}
我认为这是一个很好的OO解决方案。但我遇到了一个问题。我现在想在初始DC周围画一个边框,但我不希望节点知道这个。我希望节点仍然相对于从0,0开始的完整画布大小绘制(并且不知道偏移)。如果我在父窗口中给节点提供有关边框的知识,那么它似乎很乱 你如何解决这样的问题?如何定义与现有DC相关的新DC?
答案 0 :(得分:3)
您没有制作新DC,您可以在现有DC上设置原点。所以在你的循环中,在DrawOnCanvas()之前,你会使用CDC :: SetViewportOrg()和朋友。见http://msdn.microsoft.com/en-us/library/46t66w7t.aspx。您也可以通过这种方式实现缩放,滚动等。