问题如下:
void CMyView::OnDraw(CDC *pDC)
{
...
(1):pDC->SetMapMode(MM_ISOTROPIC);
(2):pDC->SetWindowExt(4000,3000);
(3):AfxGetMainWnd()->GetClientRect(cRect);
(4):pDC->SetViewportExt(cRect.Width(),-cRect.Height());
(5):pDC->DPtoLP(cRect);
(6):pDC->SetWindowOrg(-(cRect.Width()/2),-(cRect.Height()/2));
(7):pDC->TextOut(-850,1400,"abc");
...
}
我想问一下:上面每一步执行完后,窗口和视口的原点、范围分别是多少?屏幕分辨率是(800,600)。谢谢!

解决方案 »

  1.   

    第一句:定义逻辑单位和具体的设备单位的映射模式
    第二句:设置与设备上下文关联的窗口的X和Y坐标的范围。其中4000和3000是逻辑坐标。此时窗口大小为(4000,3000),视口大小未知。
    第三句:得到客户区尺寸。此尺寸就是当前视口尺寸。如果(800,600),在最大化时此尺寸为(800,5XX).
    第四句:设置视口的范围,第二个参数为负数,表示视口坐标往下移了cRect高度的一半。
    第五句:将设备坐标转换成逻辑坐标。因为GetClientRect得到的设备坐标
    第六句:设置设备上下文窗口的起始坐标。
    最后一句:在第六句的基础上,在逻辑坐标位置输出文本abc.