VC++开发GIS系统(50)使用自定义平面坐标系

在上一篇文章《VC++开发GIS系统(49)屏幕坐标转换编码》中已经完成了MFC中的默认坐标和GIS系统中平面坐标的转换关系,本文介绍一下调用方法。

系统调用示例

在malagisView.h里增加一个记录当前屏幕信息的变量

public:
    malaScreen mScreen;

在malagisView.cpp里给变量初始化

CmalagisView::CmalagisView()
{
    // TODO:  在此处添加构造代码
    mBaseOper = NULL;
    //屏幕坐标初始化
    mScreen.lbx = 0.0;
    mScreen.lby = 0.0;
    mScreen.scale = 1.0;
}

这里只给左下角的坐标和初始比例尺做了初始化,还需要初始化屏幕的宽度和高度,这需要OnSize函数中初始化。切换到类视图,在CmalagisView上右击,选择属性。然后重写OnSize函数,如图:

在OnSize函数中添加下面代码

void CmalagisView::OnSize(UINT nType, int cx, int cy)
{
    CView::OnSize(nType, cx, cy);

    // TODO:  在此处添加消息处理程序代码
    mScreen.hScreen = cy;//Client窗口高度
    mScreen.wScreen = cx;//Client窗口宽度
}

测试当前坐标

在OnLButtonDown中增加下面的代码

void CmalagisView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值
    
    
    //===测试自定义平面坐标系===
    double nx = 0;
    double ny = 0;
    ScreenToCoord(point.x, point.y, mScreen, &nx, &ny);
    CString a;
    a.Format(L"%f", nx);
    CString b;
    b.Format(L"%f", ny);
    MessageBox(a +L" "+ b);
    //===测试自定义平面坐标系===
    
    malaPoint tmpPoint;
    tmpPoint.x = (double)point.x;
    tmpPoint.y = (double)point.y;
    if (mBaseOper)
    {
        mBaseOper->LButtonDown(nFlags, tmpPoint);
    }
    
    CView::OnLButtonDown(nFlags, point);
}

这段代码的作用是点击鼠标左键的时候弹出点击位置的平面坐标,效果如图:

VC++开发GIS系统(49)屏幕坐标转换编码 VC++开发GIS系统(51)补充知识基于VC++的GDI+常用坐标系统详解(转)

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论