麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

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);
}

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

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)