VC++开发GIS系统(91)窗口的重绘(一)

本文目录
  • 正文

前文《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. 获取所有需要重绘的点

  2. 将步骤1中的点画出来

  3. 释放步骤1中的点

其中步骤1中用到了一个getAllPoint函数,这个函数是在malaIO中定义的,具体的实现可以参考下文。

另,关于MFC重绘可以参考相关的文章,如:VC的MFC中重绘函数的使用总结(整理) VC++ - 窗口重绘等等。

详细代码可以参考:GitHub

如您有疑问,可在文末留言,或到QQ群提问。
本站QQ群:291616564 麻辣GIS
微信公众号:malagis,扫描二维码直接关注。

打赏¥1

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

发表评论