在窗口类里绘图,绘出的字符是以工具栏的左上角为(0,0)原点,所以"abc"的显示与工具栏重叠在一起了。如下:
void CMainFrame::DoPixels(CDC* pDC)
{
pDC->TextOut(0,0,"abc");
}
而在视图类里绘图,同样绘出的字符却是以作图区白板的左上角为(0,0)原点,也就是在紧贴工具栏的下面,所以绘出的"abc"就正常的显示在视区里的第一行。如下:
void CMyDemoView::OnDraw(CDC* pDC)
{
pDC->TextOut(0,0,"abc");
}同样的函数,为何会有这种差别?

解决方案 »

  1.   

    有可能,用CPoint GetViewportOrg() const;函数看看原点相同否。
      

  2.   

    CMainFrame的范围包括工具条在内。
    CView不包括
      

  3.   

    答案就这么简单了吗?
    同样的textOut函数,难道自己会判断在哪个类里被调用吗?
      

  4.   

    那是因为你的pDC不一样啊,两个类里的CDC对象可能有不同。
      

  5.   

    Up.
    所有的绘图操作都是在当前的DC上操作的。
    显然,视图类和框架类的DC中的画图区域是不一样得。
    在框架类中可得到工具栏的客户区,从而找到空白区的左上角点
      

  6.   

    to goodboyyxh():
    你说的“那是因为你的pDC不一样啊,两个类里的CDC对象可能有不同。”
    是不是就是说在不同的类里对CDC的textOut函数做了不同的重载?
    这是你推测的还是书上有此说明?困扰中。盼解。先谢大家