什么方法都用尽了,真是想砸了电脑
为什么大家都众口一词的说,OnPrepareDC啊,可怎么Prepare都看不到效果啊!msdn的例子也这么说.搞不懂,我就这么背?这么说的人,到底这么用过没啊!!!!!!!!!!!!!!!在OnDraw里我这样: //设置映射模式,原点位置及比例
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(100,100);
pDC->SetViewportExt(2,2);
还设置了字体,背景,等等一大堆乱七八糟的东西;然后到OnMouseMove里这样:
CClientDC dc(this);
OnPrepareDC(&dc);
CClientDC* pDC=&dc; //状态栏显示鼠标坐标
dc.DPtoLP(&point);
CString str;
str.Format("(%d,%d)",point.x,point.y);
((CMainFrame*)(AfxGetApp()->GetMainWnd()))->m_wndStatusBar.SetPaneText(0,str);显示出来的坐标,原点总是在客户区的左上角,郁闷死,这说明OnMouseMove里的dc不是OnDraw里的啊,它没有坐标原点,比例信息,郁闷,郁闷!为什么别人都告诉我这么做,我这么做就是不行呢?

解决方案 »

  1.   

    把你OnDraw里面对DC的设置代码移到OnPrepareDC函数中去
    对于OnPrepareDC函数你可以这样来理解,该函数仅仅是设置DC的属性而已,和普通函数的区别就在于在OnDraw的时候系统会自动调用OnPrepareDC函数,此外和普通函数一样
      

  2.   

    OnPrepareDC顾名思义就是做准备工作的,让你对dc设置一些属性等等。在OnDraw的时候系统会自动先调用OnPrepareDC
      

  3.   

    重载OnPrepareDC函数,在改函数中调用:
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(100,100);
    pDC->SetViewportExt(2,2);
      

  4.   

    void CTestView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    CDC* pDC = GetDC();
    OnPrepareDC(pDC);
    pDC->LPtoDP(&point); ReleaseDC(pDC);
    CView::OnMouseMove(nFlags, point);
    }void CTestView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
    {

    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(100,100);
    pDC->SetViewportExt(2,2);
    CView::OnPrepareDC(pDC, pInfo);
    }
    以上这样就OK了。
      

  5.   

    //设置映射模式,原点位置及比例
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetViewportOrg(100,100);
    pDC->SetViewportExt(2,2);
    还设置了字体,背景,等等一大堆乱七八糟的东西;然后到OnMouseMove里这样:
    CClientDC dc(this);
    OnPrepareDC(&dc);   //这一句一执行,你上面的设置不是白做了吗?
    CClientDC* pDC=&dc;
    把函数OnPrepareDC重载成你需要的设置
      

  6.   

    OnDraw 里面只是一个临时的DC吧   再说你改变DC的 设置之后 ,最后 要复原的
      

  7.   

    各位大虾们真好!!!
    总算搞明白了,散分啊!
    可惜僧多粥少啊,hoho
    偶也就这么点米了:(