VC++开发GIS系统(46)自定义一个CDC绘图类

前面我们已经使用DLL的方式对整个系统进行了开发,并且已经可以成功[导出对话框](VC++开发GIS系统(39)对话框模块的建立完成调用,剩下的内容就是画图了(终于到画图了!!!!)

关于画图我在前面的文章中已经介绍了画点了,简单的方法便是将之前文章的代码的集成进来。相关文章如下:

新的问题

我们之前这些文章都工程的CXXXXXCiew中完成的,现在要把画点,画线,画面这些代码再写在view里不现实的。所以这也下在我们在文章《VC++开发GIS系统(34)解决鼠标左键的冲突》中设置了一个private变量的原因

CView* mBaseView;

在输入点类的构造函数中

/*
* 输入点
*/
CmalaPointsInput::CmalaPointsInput(CView* mView)
{
    mBaseView = mView;
    GetPointPro();
}

将view的指针传给了这个内部变量。当然我们可以在每个类的LButtonDown函数中实现相关逻辑,但是这样会造成代码耦合性加大且难以复用相关代码。所以为了方便分工和资源的统一管理,在本工作中单独新建一个绘图的类,在里面封装各种绘图函数(画点、画线、画面等),然后只要在特定的地方调用即可。

malaCDC的定义与实现

这个类也是属性工作基础类,所以这个类直接写在malaBase里面。

定义
/*
* 绘图类
*/
class malabasedll malaCDC
{
public:
    malaCDC(CView* ptView);
    ~malaCDC();
public:
    void pointDrawCircle(malaPoint Point, malaPointPro PntPro);//绘制一个圆点,传入点的坐标和属性
    void pointDrawRect(malaPoint Point, malaPointPro PntPro);//绘制一个矩形点
    void pointDrawTriangle(malaPoint Point, malaPointPro PntPro);//绘制一个三角形点

private:
    CView* mView;//绘图指针

};
实现
/*
* 绘图类构造析构实现 
*/
malaCDC::malaCDC(CView* ptView)
{
    mView = ptView;
}

malaCDC::~malaCDC()
{
}
/*
* 绘制圆点
*/
void malaCDC::pointDrawCircle(malaPoint Point, malaPointPro PntPro)
{
    MessageBox(NULL, L"绘制圆形", _T("提示"), MB_OK);
}
/*
* 绘制三角形点
*/
void malaCDC::pointDrawTriangle(malaPoint Point, malaPointPro PntPro)
{
    MessageBox(NULL, L"绘制三角形", _T("提示"), MB_OK);
}
/*
* 绘制矩(方)形点
*/
void malaCDC::pointDrawRect(malaPoint Point, malaPointPro PntPro)
{
    MessageBox(NULL, L"绘制方形", _T("提示"), MB_OK);

}

本文中具体的绘制并没有实现相关代码,只是做个测试,后面会完善补充相关内容。

调用

在malaPoints模块的输入点的类中实现函数调用,如下

void CmalaPointsInput::LButtonDown(UINT nFlags, malaPoint point)
{
    malaCDC dc(mBaseView);
    switch (mPointPro.pointStyle)
    {
    case 0:
        //如果点的类型index=0,绘制方点
        dc.pointDrawRect(point, mPointPro);
        break;
    case 1:
        //如果点的类型index=1,绘制三角点
        dc.pointDrawTriangle(point, mPointPro);
        break;
    case 2:
        //如果点的类型index=2,绘制圆点
        dc.pointDrawCircle(point, mPointPro);
        break;
    default:
        break;
    }
}

按照malaBase--malaDialogs--malaPoints--malagis重新编译运行,即可实现下面的效果:

一个更新

为了查看代码方便,现在已经将代码从coding转移到了大家熟悉的GitHub上面了,代码地址:GitHub

VC++开发GIS系统(45)导出输入点对话框并调用 VC++开发GIS系统(47)使用自定义CDC类画点

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

发表评论