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的调用呢,(注:我没有改变窗口的大小,也没有刷新窗口)
{
// 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的调用呢,(注:我没有改变窗口的大小,也没有刷新窗口)
OnPrepareDC(&dc);函数就是根据dc调整设备描述表的视图原点
当你的View类从CScrollView派生的时候,支持滚动
该函数必不可少
OnPrepareDC(&dc);函数就是调整设备描述表dc的视图原点
当你的View类从CScrollView派生的时候,支持滚动
该函数必不可少
就像是安在门上的镜子一样,你可以在出门之前整理一下头发,也可以把它打碎。
这是一种体贴的设计,是系统设计员给程序员提供的方便。允许你在画图之前作一些工作。
但你可以不管他。
你在其他地方调用了OnPrepareDC()不会和OnDraw有关。