VC++开发GIS系统(214)输入区之类实现
发布时间: 2016-06-12
所属分类: VC++开发GIS系统
前文《VC++开发GIS系统(204)输入区之类设计》设计了输入区的类,一系列的准备工作,本文对这个类做一个实现。
类的实现
在_malaPolygon.cpp中实现 CmalaLinesInput
类,代码如下:
/*
* 输入区实现
*/
CmalaPolysInput::CmalaPolysInput(CView* mView, malaScreen *pScreen, CString &fileFullPath)
{
mBaseView = mView;
mScreen = pScreen;
mPath = fileFullPath;
mIsDraw = false;
GetPolyPro();//获取输入区的属性
}
CmalaPolysInput::~CmalaPolysInput()
{
if (mPoly.size())
mPoly.clear();
}
void CmalaPolysInput::GetPolyPro()
{
if (dlgInputPoly(mPolyPro) == FALSE)
{
mPolyPro.polyStyle = 0;
mPolyPro.borderColor = RGB(0, 0, 0);
mPolyPro.borderStyle = 0;
mPolyPro.fillStyle = 0;
mPolyPro.fillColor = RGB(0, 0, 0);
}
}
void CmalaPolysInput::LButtonDown(UINT nFlags, malaPoint point)
{
mPoly.push_back(point);
mPerPoint = point;
mIsDraw = true;
}
void CmalaPolysInput::MouseMove(UINT nFlags, malaPoint point)
{
if (mIsDraw)
{
vector<malaPoint>tpPoly;
tpPoly = mPoly;
tpPoly.push_back(mPerPoint);
malaCDC mycdc(mBaseView,*mScreen);
mycdc.polyDrawAutoX(tpPoly, mPolyPro);
tpPoly.pop_back();
tpPoly.push_back(point);
mycdc.polyDrawAutoX(tpPoly, mPolyPro);
mPerPoint = point;
tpPoly.clear();
}
}
void CmalaPolysInput::RButtonDown(UINT nFlags, malaPoint point)
{
mIsDraw = false;
mPoly.push_back(point);
malaCDC mycdc(mBaseView, *mScreen);
mycdc.polyDrawAuto(mPoly, mPolyPro);
//保存点
if (mPoly.size()>=2)
{
CPolyIO pio;
pio.polyAdd(mPoly, mPolyPro, mPath);
}
mPoly.clear();
}
代码有点长,这里解释一下思路。
- 构造输入区的类的时候调用
GetPolyPro
函数,(参考:VC++开发GIS系统(205)输入区之设置区属性对话框),设置并记录区的输入参数。 - 点击左键记录当前点击坐标点,并push到点的序列
mPoly
中,同时设置绘图状态mIsDraw
为真。 - 移动鼠标,如果
mIsDraw
为真则触发橡皮筋绘图(参考:VC++开发GIS系统(206)输入区之绘制多边形区的函数、VC++开发GIS系统(207)输入区之绘制椭圆区的函数、VC++开发GIS系统(208)输入区之绘制区的函数(多边形与椭圆))。 - 右击结束绘图,并保存绘制的区(参考:VC++开发GIS系统(213)输入区之保存区函数)
详细代码可以参考:GitHub
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子