<TABLE style="TABLE-LAYOUT: fixed">
经过一上午的研究,目前的体会是:
设备坐标就是你创建出来的窗口那个坐标,其原点始终在(0,0),即窗口左上角,
逻辑坐标就是你GDI函数(绝大部分)中使用的坐标,它是一个虚拟的”窗口”,仅仅为了让你画图方便
使用了GDI函数后这里指定的逻辑坐标Windows在实际输出到窗口上时将其转换为设备坐标,这时映像模式派上用途了,
设置”窗口”坐标原点(逻辑坐标)方法:
1
设备坐标就是你创建出来的窗口那个坐标,其原点始终在(0,0),即窗口左上角,
逻辑坐标就是你GDI函数(绝大部分)中使用的坐标,它是一个虚拟的”窗口”,仅仅为了让你画图方便
使用了GDI函数后这里指定的逻辑坐标Windows在实际输出到窗口上时将其转换为设备坐标,这时映像模式派上用途了,
设置”窗口”坐标原点(逻辑坐标)方法:
1
CRect rect;
GetClientRect (&rect);
dc.SetMapMode (MM_LOENGLISH);
dc.SetViewportOrg (rect.Width () / 2, rect.Height () / 2);
2
CRect rect;
GetClientRect (&rect);
CPoint point (rect.Width () / 2, rect.Height () / 2);
dc.SetMapMode (MM_LOENGLISH);
dc.DPtoLP (&point);
dc.SetWindowOrg (-point.x, -point.y);
两种方法都是将”窗口”坐标(逻辑坐标)原点设置为客户区中央,但是需要注意的是在使用SetWindowOrg时坐标值必须是逻辑坐标,因此需要dc.DPtoLP (&point),而在使用SetViewportOrg时则不需,因为这个函数使用的坐标值是设备坐标值。
总结:设置逻辑坐标原点用SetViewportOrg最好,其中指定的x,y即是最后逻辑坐标原点的值,在这个基础上使用GDI函数即是。