MFC改变坐标系

Posted zuoyou151

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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表示垂直方向逻辑坐标的范围

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

 

以上是关于MFC改变坐标系的主要内容,如果未能解决你的问题,请参考以下文章

VS C++ MFC 控件怎么修改大小?属性里 没有size一项。。难道只能用鼠标去拉着看左下角的坐标和大小吗??

实例详解:MFC坐标轴实现

mfc怎么设置dialog大小

MFC, SDI app, 为啥视图的布局不能通过代码改变?

改变 uv 坐标对金属的意外性能影响

MFC list control 单击选择全行,这时整行颜色都变了,此时要改变某个单元格的颜色怎么做 已获得某行某列