首页 > 代码库 > 工具管理----操作类介绍

工具管理----操作类介绍

操作类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 }

 

工具管理----操作类介绍