使用Rectangle函数画图的时候,不用告诉GDI画一个100像素宽,50像素高的矩形,而是告诉它画一个100单位宽,50单位高的矩形
默认映射模式是:MM_TEXT
//通过SetMapMode()函数改变映射模式
dc.SetMapMode(MM_LOMETRIC);
前面的几种映射模式,没什么说的,主要是后面两个自定义的映射模式复杂一点。
SetWindowExe设定窗口尺寸,SetViewportExt设定视口尺寸。
窗口尺寸以逻辑单位计算,视口尺寸以物理单位计算。
CRect rectClient;
GetClientRect(rectClient);//取窗口物理尺寸(单位:像素)
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1000, 1000);//窗口逻辑大小:1000*1000,
pDC->SetViewportExt(rectClient.right, -rectClient.bottom);//改变Y坐标方向--viewport使用物理大小
pDC->SetViewportOrgEX(rectClient.right / 2, rectClient.bottom / 2);//设置窗口中心点为坐标系原点--Viewport使用物理大小
pDC->Ellipse(CRect(-500, -500, 500, 500));//以逻辑单位画图---普通GDI API使用逻辑单位
默认方式下,物理/逻辑值是1:1关系,可换用。但使用SetWindowExt/SetViewportExt后两者不可混用。
注意:
SetWindowOrgEx();//移动窗口的原点
SetViewportOrgEx();//移动视窗口的原点
正常情况下,二者用其一