void CEX04AView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo) 
{
// TODO: Add your specialized code here and/or call the base class
pDC->SetMapMode(MM-HIMETRIC);
CView::OnPrepareDC(pDC, pInfo);
}
为什么设置坐标映射模式要在这里面呢,
  还有,CView::OnPrepareDC(pDC, pInfo);我把删除了,也没有出错,为什么?
我记在在CWnd中,这个函数非常得要,是窗口的初始化问题。
“技术内幕中说,应用程序框架将在调用OnDraw()之前调用OnPrepareDC函数,那么我要问,当我在别的函数中调用OnPrepareDC是,会不会OnDraw也会被调用呢?
比如这样:
void CEX04AView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
OnPrepareDC(&dc);
CRect rectDevice=m_rectEllipse;
dc.LPtoDP(rectDevice);
    ……………………
}
这会不会再次引发OnDraw的调用呢,(注:我没有改变窗口的大小,也没有刷新窗口)

解决方案 »

  1.   

    我认为:
    OnPrepareDC(&dc);函数就是根据dc调整设备描述表的视图原点
    当你的View类从CScrollView派生的时候,支持滚动
    该函数必不可少
      

  2.   

    我认为:
    OnPrepareDC(&dc);函数就是调整设备描述表dc的视图原点
    当你的View类从CScrollView派生的时候,支持滚动
    该函数必不可少
      

  3.   

    当你的窗体不是从CScrollView继承来的。或者窗口很小,没有出滚动条时OnprepareDC的确可以删除掉
      

  4.   

    OnPrepareDC()
    就像是安在门上的镜子一样,你可以在出门之前整理一下头发,也可以把它打碎。
    这是一种体贴的设计,是系统设计员给程序员提供的方便。允许你在画图之前作一些工作。
    但你可以不管他。
    你在其他地方调用了OnPrepareDC()不会和OnDraw有关。