bool ColoredPolygon::RemoveDots() { if (_selectedDots.size() > 0) { RemoveDot(_selectedDots); _selectedDots.clear(); _dotUnderCursor.clear(); GenerateTriangles(); return true; } return false; }
CString CPathUtilEx::GetRelativePath(const CString& strMainPathOrFile2, const CString& strRelativePathOrFile2) { //去除点号 CString strMainPathOrFile = strMainPathOrFile2; CString strRelativePathOrFile = strRelativePathOrFile2; if (strMainPathOrFile.IsEmpty() || strRelativePathOrFile.IsEmpty()) { return _T(""); } if (!RemoveDot(strMainPathOrFile)) { return _T(""); } if (!RemoveDot(strRelativePathOrFile)) { return _T(""); } if (strMainPathOrFile.Find(strRelativePathOrFile) == 0) //就是子串 { return strRelativePathOrFile; } //按照斜杠解析出每个文件夹名称 CStringArray strTempMainArray; int nStart = 0; for (int i=0; i<strMainPathOrFile.GetLength(); ++i) { if (strMainPathOrFile[i] == _T('\\')) //找到斜杠 { CString strTemp = strMainPathOrFile.Mid(nStart, i-nStart); if (!strTemp.IsEmpty()) { strTempMainArray.Add(strTemp); } nStart = i+1; } } if (strMainPathOrFile[strMainPathOrFile.GetLength()-1] != _T('\\')) { strTempMainArray.Add(strMainPathOrFile.Mid(nStart)); } CStringArray strTempRelativeArray; nStart = 0; for (int i=0; i<strRelativePathOrFile.GetLength(); ++i) { if (strRelativePathOrFile[i] == _T('\\')) //找到斜杠 { CString strTemp = strRelativePathOrFile.Mid(nStart, i-nStart); if (!strTemp.IsEmpty()) { strTempRelativeArray.Add(strTemp); } nStart = i+1; } } if (strRelativePathOrFile[strRelativePathOrFile.GetLength()-1] != _T('\\')) { strTempRelativeArray.Add(strRelativePathOrFile.Mid(nStart)); } //计算相对路径 if (strTempMainArray.GetSize() == 0 || strTempRelativeArray.GetSize() == 0) { return strRelativePathOrFile; } if (strTempMainArray[0].CompareNoCase(strTempRelativeArray[0]) != 0) //根盘符不一样,直接返回绝对路径 { return strRelativePathOrFile; } int nNotSameIndex=0; for (; nNotSameIndex<strTempMainArray.GetSize() && nNotSameIndex<strTempRelativeArray.GetSize(); ++nNotSameIndex) { if (strTempMainArray[nNotSameIndex].CompareNoCase(strTempRelativeArray[nNotSameIndex]) != 0) { break; } } int nFolderCount = (int)strTempMainArray.GetSize()-nNotSameIndex-1; CString strPath; for (int i=0; i<nFolderCount; i++) { strPath +=_T("..\\"); } for (int i=nNotSameIndex; i<strTempRelativeArray.GetSize(); i++) { strPath += strTempRelativeArray[i]; if (i < strTempRelativeArray.GetSize()-1) //不是最后一个 { strPath += _T('\\'); } } return strPath; }