首页 > 代码库 > 工具管理----操作类介绍
工具管理----操作类介绍
操作类CToolBoxCtr是被主对话框调用的。所有的底层操作都是由CToolBoxCtr实现的。
功能:
1、单例模式
2、添加工具信息
3、删除工具信息
4、获取添加工具的图标信息。
5、启动添加的工具
6、初始化的时候,从配置文件读取上次添加的工具信息
7、退出的时候,更新工具信息到配置文件里。
1 #include "StdAfx.h" 2 #include "ToolBoxCtr.h" 3 4 // 单例模式 5 CToolBoxCtr * CToolBoxCtr::m_pInstance = NULL; 6 7 CToolBoxCtr::CToolBoxCtr(void) 8 { 9 m_toolFileInfoArray.RemoveAll(); 10 11 m_strWorkDir = GetCurrentFolder(); 12 13 m_strConfigFile.Format(_T("%s\\%s"), m_strWorkDir, TOOLBOXFILE); 14 15 m_imageList.Create(32, 32, ILC_COLOR32, 0, 5); 16 m_imageList.SetBkColor(DLG_BKCOLOR); 17 ReadConfigFile(); 18 } 19 20 CToolBoxCtr::~CToolBoxCtr(void) 21 { 22 SaveConfigFile(); 23 ClearToolFileInfoArray(); 24 } 25 26 CToolBoxCtr * CToolBoxCtr::GetInstance() 27 { 28 if (NULL == m_pInstance) 29 { 30 m_pInstance = new CToolBoxCtr(); 31 } 32 33 return m_pInstance; 34 } 35 36 void CToolBoxCtr::Destroy() 37 { 38 if (NULL != m_pInstance) 39 { 40 delete m_pInstance; 41 m_pInstance = NULL; 42 } 43 } 44 45 void CToolBoxCtr::ClearToolFileInfoArray() 46 { 47 for (int i = 0; i < m_toolFileInfoArray.GetCount(); i++) 48 { 49 delete m_toolFileInfoArray[i]; 50 m_toolFileInfoArray[i] = NULL; 51 } 52 53 m_toolFileInfoArray.RemoveAll(); 54 } 55 56 // 读取工具信息 57 void CToolBoxCtr::ReadConfigFile() 58 { 59 CStdioFile file; 60 61 // 以只读模式打开 62 if (!file.Open(m_strConfigFile, CFile::modeRead)) 63 { 64 return; 65 } 66 67 CToolFileInfo * pToolFileInfo = NULL; 68 CString strLine; 69 70 while (file.ReadString(strLine)) 71 { 72 strLine = strLine.Trim(); 73 74 // 注释,跳过 75 if (strLine.IsEmpty() 76 || 0 == strLine.Left(1).Compare(Comment_Flag)) 77 { 78 continue; 79 } 80 else if (0 == strLine.Left(1).Compare(ToolInfoLeft_Flag) 81 && 0 == strLine.Right(1).Compare(ToolInfoRight_Flag)) 82 { 83 if (NULL != pToolFileInfo) 84 { 85 m_toolFileInfoArray.Add(pToolFileInfo); 86 } 87 pToolFileInfo = new CToolFileInfo(); 88 } 89 else if (NULL != pToolFileInfo) 90 { 91 int index = strLine.Find(_T("=")); 92 93 if (Not_Find != index) 94 { 95 CString strLeft = strLine.Left(index).Trim(); 96 CString strRight = strLine.Mid(index + 1).Trim(); 97 98 if (strLeft.IsEmpty()) 99 {100 continue;101 }102 103 if (0 == strLeft.CompareNoCase(ToolInfoName))104 {105 pToolFileInfo->SetToolName(strRight);106 }107 else if (0 == strLeft.CompareNoCase(ToolInfoPath))108 {109 if (strRight.IsEmpty() || !PathFileExists(strRight))110 {111 delete pToolFileInfo;112 pToolFileInfo = NULL;113 continue;114 }115 pToolFileInfo->SetToolPath(strRight);116 GetFileIconFromPath(pToolFileInfo);117 }118 }119 }120 }121 122 if (NULL != pToolFileInfo)123 {124 m_toolFileInfoArray.Add(pToolFileInfo);125 }126 127 file.Close();128 }129 130 void CToolBoxCtr::SaveConfigFile()131 {132 CStdioFile file;133 if (!file.Open(m_strConfigFile, CFile::modeCreate | CFile::modeReadWrite))134 {135 return;136 }137 138 CString strLine;139 140 for (int i = 0; i < m_toolFileInfoArray.GetCount(); i++)141 {142 strLine.Format(_T("[ToolInfo%d]\r\n"), i + 1);143 file.WriteString(strLine);144 145 strLine.Format(_T("ToolName = %s\r\n"), m_toolFileInfoArray[i]->GetToolName());146 file.WriteString(strLine);147 148 strLine.Format(_T("ToolPath = %s\r\n\r\n"), m_toolFileInfoArray[i]->GetToolPath());149 file.WriteString(strLine);150 }151 152 file.Close();153 }154 155 CString CToolBoxCtr::GetCurrentFolder()156 {157 char szPath[_MAX_PATH] = {0};158 GetModuleFileName(NULL, szPath, sizeof(szPath));159 160 char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];161 _splitpath_s(szPath, drive, dir, fname, ext);162 163 CString strPath;164 strPath.Format(_T("%s\\%s"), drive, dir);165 166 return strPath;167 }168 169 void CToolBoxCtr::GetFileIconFromPath(CToolFileInfo * pFileInfo)170 {171 if (NULL == pFileInfo)172 {173 return;174 }175 176 CString strPath = pFileInfo->GetToolPath();177 if (strPath.IsEmpty() || !PathFileExists(strPath))178 {179 return;180 }181 182 SHFILEINFO stFileInfo;183 :: SHGetFileInfo( strPath, 0, &stFileInfo, sizeof(stFileInfo), 184 SHGFI_ICON | SHGFI_LARGEICON | SHGFI_TYPENAME);185 m_imageList.Add(stFileInfo.hIcon);186 187 if (IsExeType(stFileInfo.szTypeName))188 {189 pFileInfo->SetToolType(TToolType_Exe_Yes);190 }191 else192 {193 pFileInfo->SetToolType(TToolType_Exe_No);194 }195 196 }197 198 BOOL CToolBoxCtr::IsExeType(CString strTypeName)199 {200 char szType[][20] = {_T("应用程序"), _T("Windows 批处理文件")};201 202 for (int i = 0; i < sizeof(szType)/sizeof(szType[0]); i++)203 {204 if (0 == strTypeName.CompareNoCase(szType[i]))205 {206 return TRUE;207 }208 }209 return FALSE;210 }211 212 void CToolBoxCtr::AddNewTool(CString strToolName, CString strToolPath)213 {214 if (strToolName.IsEmpty() 215 || strToolPath.IsEmpty()216 || !PathFileExists(strToolPath))217 {218 return;219 }220 221 CToolFileInfo * PToolInfo = new CToolFileInfo;222 PToolInfo->SetToolName(strToolName);223 PToolInfo->SetToolPath(strToolPath);224 GetFileIconFromPath(PToolInfo);225 226 m_toolFileInfoArray.Add(PToolInfo);227 }228 229 CString CToolBoxCtr::GetToolNameFromPath(CString strPath)230 {231 char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];232 _splitpath_s(strPath, drive, dir, fname, ext);233 234 return fname;235 }236 237 void CToolBoxCtr::RemoveTool(int nItem)238 {239 if (0 > nItem || nItem > m_toolFileInfoArray.GetCount()-1)240 {241 return;242 }243 delete m_toolFileInfoArray[nItem];244 m_toolFileInfoArray[nItem] = NULL;245 m_toolFileInfoArray.RemoveAt(nItem);246 m_imageList.Remove(nItem);247 }248 249 int CToolBoxCtr::RunToolFile(int index)250 {251 if (0 > index || index > m_toolFileInfoArray.GetCount()-1)252 {253 return RetCode_ExeRunFailed;254 }255 256 CToolFileInfo *pFileInfo = m_toolFileInfoArray[index];257 258 if (NULL == pFileInfo)259 {260 return RetCode_ExeRunFailed;261 }262 263 CString strCMD;264 strCMD.Format(_T("\"%s\""), pFileInfo->GetToolPath());265 266 if (TToolType_Exe_Yes == pFileInfo->getToolType())267 {268 STARTUPINFO si;269 PROCESS_INFORMATION pi;270 271 ZeroMemory( &si, sizeof(si) );272 si.cb = sizeof(si);273 ZeroMemory( &pi, sizeof(pi) );274 275 if (!CreateProcess(NULL, (LPSTR)(LPCTSTR)strCMD, NULL, NULL, FALSE, 0, NULL,276 NULL, &si, &pi )) 277 {278 return RetCode_ExeRunFailed;279 }280 }281 else282 {283 if (32 >= (int)ShellExecute(NULL, _T("open"), strCMD, NULL,284 NULL, SW_SHOWNORMAL))285 {286 return RetCode_FileOpenFailed;287 }288 }289 290 return RetCode_OK;291 292 }
工具管理----操作类介绍
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。