VC++开发GIS系统(91)窗口的重绘(一)
发布时间: 2015-12-31
所属分类: VC++开发GIS系统
前文《VC++开发GIS系统(90)画点(最终版)》已经可以正式实现画点了,也就是说画的点已经可以在界面显示,并且保存下来。但是有这么一个问题:当最大化或者最小化窗口的时候,之前画的点就不见了。下面的工作就是要实现重绘图形,使之最大化或者最小化窗口的时候,图形仍然存在。
OnDraw函数
对OnDraw函数的修改如下:
void CmalagisView::OnDraw(CDC* /*pDC*/)
{
CmalagisDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
displayAllGraphs();
}
为了方便这里封装了一个displayAllGraphs函数,用来绘制所有文件打开状态下的的图形。
displayAllGraphs函数
//重绘函数
void CmalagisView::displayAllGraphs()
{
upadteTree();
for (size_t i = 0; i < mNode.size(); i++)
{
if (mNode[i].isOpen == true)
{
//重绘点文件
if (mNode[i].fileType==L"mpt")
{
//先获取所有符合条件的点
CPointIO pio;
vector<malaPointFile>allPoints;
pio.getAllPoint(mScreen, allPoints,mNode[i].filePath);
//再依次画点
malaCDC dc(this,mScreen);
for (size_t j = 0; j < allPoints.size();j++)
{
switch (allPoints[j].m_pointpro.pointStyle)
{
case 0:
dc.pointDrawRect(allPoints[j].m_point, allPoints[j].m_pointpro);
break;
case 1:
dc.pointDrawTriangle(allPoints[j].m_point, allPoints[j].m_pointpro);
break;
case 2:
dc.pointDrawCircle(allPoints[j].m_point, allPoints[j].m_pointpro);
break;
default:
break;
}
}
if (allPoints.size())//释放vector
allPoints.clear();
}
}
}
}
可以看出这里只实现了点的重绘,在后面的开发中会继续完善。从上面的代码中可以发现基本的流程如下:
获取所有需要重绘的点
将步骤1中的点画出来
释放步骤1中的点
其中步骤1中用到了一个getAllPoint函数,这个函数是在malaIO中定义的,具体的实现可以参考下文。
另,关于MFC重绘可以参考相关的文章,如:VC的MFC中重绘函数的使用总结(整理) 、VC++ - 窗口重绘等等。
详细代码可以参考:GitHub
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子