MFC改变坐标系

1.在MainFrm中的PreCreateWindow中设置默认窗口大小

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWndEx::PreCreateWindow(cs) )
        return FALSE;
    // TODO: 在此处通过修改
    //  CREATESTRUCT cs 来修改窗口类或样式
    //设置默认窗口大小为400pixel*300pixel
    cs.cx = 400;
    cs.cy = 300;
    return TRUE;
}

2.在View类中添加OnPaint()消息处理函数

void C透视投影View::OnPaint()
{
    CPaintDC dc(this); // device context for painting
                       // TODO: 在此处添加消息处理程序代码
                       // 不为绘图消息调用 CView::OnPaint()
    OnPrepareDC(&dc);
    OnDraw(&dc);
    CRect rc;    //矩形结构
    GetClientRect(&rc);     //获得窗口库视区
    int cx = rc.right;
    int cy = rc.bottom;
    dc.SetMapMode(MM_ISOTROPIC);    //X=Y
    dc.SetWindowExt(1000, 1000);    //设置逻辑窗口,默认窗口原点为(0,0)
    dc.SetViewportExt(cx, -cy);     //定义输出视口,X右Y上为正
    dc.SetViewportOrg(cx / 2, cy / 2);//定义视口原点为客户区中心
    dc.Ellipse(-500, 500, 500, -500); //绘制椭圆与客户去外接的椭圆
    //绘制水平垂直的四条半径
    dc.MoveTo(0, 0);
    dc.LineTo(500, 0);
    dc.MoveTo(0, 0);
    dc.LineTo(0, 500);
    dc.MoveTo(0, 0);
    dc.LineTo(0, -500);
    dc.MoveTo(0, 0);
    dc.LineTo(-500, 0);
}

 MM_ISOTROPIC:逻辑单位被映射为具有等刻度轴的任意单位,x轴上的一个单位被映射为

                               y轴上的一个单位。

SetWindowExt(int cx,int cy):cx表示水平方向逻辑坐标的范围

                                               cy表示垂直方向逻辑坐标的范围

                                               当改变窗口大小时,以窗口的宽度或高度较小的方向为标准

原文地址:https://www.cnblogs.com/zuoyou151/p/10108557.html