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

其他相关文章

如果对本文有其他疑问,可以在本文下方留言。 如果有其他GIS、3S相关疑问也可以到 麻辣GIS问答 版块发表提问。
本站QQ群:291616564; 微信公众号:malagis,扫描 二维码 直接关注。

打赏¥1

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

发表评论