什么方法都用尽了,真是想砸了电脑
为什么大家都众口一词的说,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里的啊,它没有坐标原点,比例信息,郁闷,郁闷!为什么别人都告诉我这么做,我这么做就是不行呢?
为什么大家都众口一词的说,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里的啊,它没有坐标原点,比例信息,郁闷,郁闷!为什么别人都告诉我这么做,我这么做就是不行呢?
对于OnPrepareDC函数你可以这样来理解,该函数仅仅是设置DC的属性而已,和普通函数的区别就在于在OnDraw的时候系统会自动调用OnPrepareDC函数,此外和普通函数一样
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(100,100);
pDC->SetViewportExt(2,2);
{
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了。
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetViewportOrg(100,100);
pDC->SetViewportExt(2,2);
还设置了字体,背景,等等一大堆乱七八糟的东西;然后到OnMouseMove里这样:
CClientDC dc(this);
OnPrepareDC(&dc); //这一句一执行,你上面的设置不是白做了吗?
CClientDC* pDC=&dc;
把函数OnPrepareDC重载成你需要的设置
总算搞明白了,散分啊!
可惜僧多粥少啊,hoho
偶也就这么点米了:(