VC++开发GIS系统(80)新建点文件

前文《VC++开发GIS系统(78)新建点文件之导出新建点文件对话框》和《VC++开发GIS系统(79)新建点文件之文件模块代码实现》实现了新建点文件的对话框和文件模块。下面就是整体调用了,方法如下:

1. 响应新建点文件

方法参考《VC++开发GIS系统(71)响应CTreeCtrl右键菜单的函数》这里就不多说了。

2. 响应代码实现

/*
* 新建点文件
*/
void CPrjManage::OnNewPoint()
{
    //MessageBox(L"点文件", L"提示", MB_ICONASTERISK);
    //先判断有没打开工程
    if (mBasePath!=L"")//判断是否已经有工程存在,否则不能打开
    {
        CString pointFileName;
        if (dlgNewPointFile(pointFileName))//如果用户在对话框中设置了用户名
        {
            malaTree tpNode;
            if (makeTree(tpNode, pointFileName, L"mpt"))//函数见下文
            {
                CFileFind fFind;
                if (!fFind.FindFile(tpNode.filePath))//如果文件不存在(也就是不冲突,没有同名文件)
                {
                    fileNodeTree.push_back(tpNode);
                    if (currentPrj.newPointFile(fileNodeTree, tpNode.filePath))//如果文件操作成功
                    {
                        HTREEITEM hItem = m_wndPrjView.GetRootItem();
                        m_wndPrjView.InsertItem(tpNode.itemnode, 2, 2, hItem);//插入目录树节点
                    }
                    else
                    {
                        MessageBox(L"创建文件失败", L"提示", MB_ICONWARNING);
                    }
                }
                else
                {
                    MessageBox(L"文件已经存在", L"提示", MB_ICONWARNING);
                }
            }
            else
            {
                MessageBox(L"创建文件失败", L"提示", MB_ICONWARNING);
            }

            
        }
        else
        {
            MessageBox(L"创建文件失败", L"提示", MB_ICONWARNING);
        }
    }
    else
    {
        MessageBox(L"当前没有工程文件,请先新建工程或者打开已有工程", L"提示", MB_ICONWARNING);
    }
}

上面用到了一个makeTree函数,实现如下:

//构造文件节点
bool CPrjManage::makeTree(malaTree &rTree, CString fileName, CString fileType)
{
    rTree.filePath = mBasePath  + fileName +L"."+ fileType;
    rTree.fileType = fileType;
    rTree.itemnode = fileName + L"." + fileType;
    rTree.isActive = false;
    rTree.isOpen = false;
    for (size_t i = 0; i < fileNodeTree.size(); i++)
    {
        if (fileNodeTree[i].filePath == rTree.filePath)
        {
            return false;
        }
    }
    return true;
}

这个函数用来构造一个目录树节点,并且判断如果目录树中已经有同名的节点,则创建失败。

详细代码可以参考:GitHub

VC++开发GIS系统(79)新建点文件之文件模块代码实现 VC++开发GIS系统(81)文件的状态

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

发表评论