1. 调用SetMapMode(MM_ANISOTROPIC)时,逻辑描画領域坐标系的原点与画面的左上角是重叠的。然后需要调用SetWindowExt()函数和SetViewportExt()函数,来设定纵轴横轴的単位和方向以及伸缩比例。
virtual CSize SetWindowExt(int cxWindow, int cyWindow);
virtual CSize SetViewportExt(int cxViewport, int cyViewport);
一般说SetWindowExt()函数和SetViewportExt()函数要成对调用。它们的意思(功能)是:用cxViewport个物理像素来表现cxWindow个逻辑点(数学上的长度)。同样用cyViewport个物理像素来表现cyWindow个逻辑点(数学上的长度)。cx和cy看起来好像是为了设定描画範囲参数,其实不然。很简单,它们是代表逻辑长度与物理长度的比值的分子和分母。正负符号也可以设定。当cxViewport/cxWindow为正的情况下,X軸的方向是指向右方,反过来指向左方。 cyViewport/cyWindow为正的情况下,Y軸的方向是指向上方,反过来指向下方。
CRect rc;
CWnd *pWnd = GetDlgItem(IDC_PIC_MAPS);//参数为控件ID
// pWnd->SetWindowPos(NULL,0,0,500,200,SWP_NOZORDER|SWP_NOMOVE);
m_pCDC = GetDlgItem(IDC_PIC_MAPS)->GetDC();
m_pCDC->SetBkColor(RGB(0,0,0));
pWnd->GetClientRect(&rc);//rc为控件的大小。
int a = rc.Width();
int b = rc.Height();
m_pCDC->SetMapMode(MM_ANISOTROPIC);
m_pCDC->SetViewportExt(1,1);
m_pCDC->SetWindowExt((REAL_WIDTH )/rc.Width()+1,-(REAL_HEIGHT)/rc.Height()-1);
m_pCDC->SetViewportOrg(0,rc.Height()/2);//改变原点