VC++开发GIS系统(46)自定义一个CDC绘图类
前面我们已经使用DLL的方式对整个系统进行了开发,并且已经可以成功[导出对话框](VC++开发GIS系统(39)对话框模块的建立完成调用,剩下的内容就是画图了(终于到画图了!!!!)
关于画图我在前面的文章中已经介绍了画点了,简单的方法便是将之前文章的代码的集成进来。相关文章如下:
- VC++开发GIS系统(13)画点
- VC++开发GIS系统(14)画点的详细解释
- VC++开发GIS系统(16)画点的Ellipse函数
- VC++开发GIS系统(17)画一个三角形的点
- VC++开发GIS系统(18)画一个方形的点
- VC++开发GIS系统(19)设置点的大小
- VC++开发GIS系统(20)设置点边框颜色
- VC++开发GIS系统(22)设置点的边框线型
- VC++开发GIS系统(23)设置点的边框宽度
- VC++开发GIS系统(24)设置宽度大于1的虚线边框
- VC++开发GIS系统(27)设置点的填充颜色
新的问题
我们之前这些文章都工程的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
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。