VC++开发GIS系统(29)关于鼠标左键的联想1
从写这个教程至今已经有了一段时间了,今天在这里说一点闲话,以及之后的想法。首先你看到的这个教程的整个过程就是当年我们组的人(团队的成员有:张铁映 陈锐 黄婷婷 李岂伍 陆川伟 缪玲珑 姚瑶 尹全超)参加@万波老师的地理信息系统工程的时候的所做的东西,教程的思路也就是我们当年所进行的思路,如果你从教程1一直看到现在,可能我要对你说一声sorry,因为这个过程并不是我们的系统所设计的全部,而是我们的一个尝试。当然这也不是毫无意义的,正是这些尝试,使我们掌握了关于VC++开发的基础知识,所以前面这些教程(1-28)算是一个基础,也希望看到此的你能有所收获。
为什么今天会有这么一个教程29呢?
这也是当时我们开发到此的时候遇到的一个问题,大家可以看到在之前的文章中,我一直在画点,并且用到的是鼠标左键。这个左键有什么问题呢?
不知道大学之前有没用过ArcGIS或者MapGIS,甚至其他任何图形类的软件,你会发现,这个左键用的太TM频繁了!画点要用,选择点要用,移动点要用,复制点要用;画线要用,选择线要用,移动线要用,复制线要用,删除线也要用...如果没了鼠标左键,世界会怎样?软件会怎样?几乎不能用啊!!!
可为什么要担心呢?
相信看到这篇文章,大家应该都写过VC++或者MFC的程序吧,一定应该大约知道一点关于docment和view吧。像我这样写代码的水平(当然不高),我喜欢把所有有关图形显示的东西view里,与鼠标左键的东西也都是写在view里的OnLButtonDown函数。下面是我之前画点的示例代码:
void CMalaGISView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (curMod == "drawpoint")
{
CClientDC dc(this);
//画方形的点
LOGBRUSH log;
log.lbColor = 0;
log.lbStyle = BS_SOLID;
CPen pen(PS_GEOMETRIC | PS_DASH, 5, &log);
CPen *oldPen = dc.SelectObject(&pen);
dc.Rectangle(CRect(CPoint(point.x - 60, point.y - 60), CPoint(point.x + 60, point.y + 60)));
dc.SelectObject(oldPen);
pen.DeleteObject();
}
CView::OnLButtonDown(nFlags, point);
}
这里为了标记是画点,我使用的方法是这样的:
if (curMod == "drawpoint")
{
//画点
}
可是如果多了怎么处理呢?如果按照之前的方法应该是这样的:
if (curMod == "drawpoint")
{
//画点
}
if (curMod == "drawline")
{
//画线
}
if (curMod == "drawarea")
{
//画面
}
if (curMod == "drawtext")
{
//画注释
}
if (curMod == "drawselectpoint")
{
//选择点
}
......
理论是可行的,但是这种方式会对后期的程序维护开发工作造成灾难,说大一点,也就是软件危机,那怎样解决这个问题呢?
针对这种级别的程序,可以用面向对象的方法,具体参考下篇文章,本文暂时就到这里。
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。