程序修改文件

第一步:头文件,包含相应的类、函数、变量

///对于文件内容的修改,这种方法虽然效率不高(对超多文件同时修改)但是这种方法比较简单
///也比较容易后期修改,因此备份一份,以供下次遇到相同问题时修改一下即可使用  zp 20170313 15:44:40

#pragma once
#include <vector>
#include <map>
#include <string>
#include <fstream>
#include <algorithm>
#include "afxcmn.h"
using namespace std;

#define WM_FUNCTION_MSG (WM_USER + 0x468)

// CSrcToolDlg dialog
class CSrcToolDlg : public CDialog
{
// Construction
public:
    int m_iTotalFiles;
    CProgressCtrl m_progress;
    void ResetAllData();
    void AppendMsgShow(CString strMsg, UINT uIdCtrl);
    CSrcToolDlg(CWnd* pParent = NULL);  // standard constructor

// Dialog Data
    enum { IDD = IDD_SRCTOOL_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support


// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    virtual BOOL OnInitDialog();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnBnClickedButtonFuncStart();
    afx_msg void OnBnClickedButtonSearch();
    afx_msg LRESULT OnFunctionMsg(WPARAM wParam,LPARAM lParam);
};

在这里我是直接把我工程里面的内容复制过来,所以有好多ID和ID对应的事件函数,如果网友在采用此代码时,只需要把对应的ID修改和自己项目中的ID一样即可。后续我会添加一些注释,使代码更容易看懂。

  1. 本程序在修改文件采用的方式是,先定义好需要替换的内容,这里是以map
// SrcToolDlg.cpp : implementation file
//
#include "stdafx.h"
#include "SrcTool.h"
#include "SrcToolDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CString g_strMsg = _T("");

#ifdef ZP_CHANGE
map<string, string> m_mapStringChange; ///add zp 20170313 一些字符串修改
#endif

map<string, string> m_mapClassChange;//类名
map<string, string> m_mapFuncChange;//函数接口名
map<string, string> m_mapFileChange;//文件名
map<string, string> m_mapOtherChange;//其他变更
vector<string>      m_vctKeyWords;//关键字
vector<string>      m_vctDeleted;//已不再使用的文件和类名

vector<CString>     m_vctKeyWordsFound;


// CSrcToolDlg dialog

CSrcToolDlg::CSrcToolDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CSrcToolDlg::IDD, pParent)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSrcToolDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_PROGRESS_FUNC, m_progress);
}

BEGIN_MESSAGE_MAP(CSrcToolDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_WM_LBUTTONDOWN()
    ON_BN_CLICKED(IDC_BUTTON_FUNC_START, &CSrcToolDlg::OnBnClickedButtonFuncStart)
    ON_BN_CLICKED(IDC_BUTTON_SEARCH, &CSrcToolDlg::OnBnClickedButtonSearch)
    ON_MESSAGE(WM_FUNCTION_MSG,OnFunctionMsg)
END_MESSAGE_MAP()


// CSrcToolDlg message handlers
CString string2CString(string strSrc)
{
    if(strSrc.length() <= 0)
        return _T("");

    CString strTarge = _T("");
    wchar_t* buff;
    const char* ac = strSrc.c_str();
    if(ac == NULL || strlen(ac) <= 0)
        buff = NULL;
    int n = MultiByteToWideChar(0,0,ac,-1,NULL,0);
    buff = new wchar_t[n];
    wmemset(buff,0,n);
    MultiByteToWideChar(0,0,ac,-1,buff,n);
    strTarge = buff;
    if(buff)
    {
        delete[] buff;
        buff = NULL;
    }

    return strTarge;
}

string CString2string(CString strSrc)
{
    string strTarge = "";

    int nLength = strSrc.GetLength();
    int nBytes = WideCharToMultiByte(0,0,strSrc,nLength,NULL,0,NULL,NULL);
    char* VoicePath = new char[ nBytes + 1];
    memset(VoicePath,0,nLength + 1);
    WideCharToMultiByte(0, 0, strSrc, nLength, VoicePath, nBytes, NULL, NULL); 
    VoicePath[nBytes] = 0;
    strTarge = VoicePath;
    if(VoicePath)
    {
        delete[] VoicePath;
        VoicePath = NULL;
    }

    return strTarge;
}

bool FileIsDeleted(string strFile)
{
    for (unsigned int i = 0 ; i < m_vctDeleted.size() ; i ++)
    {
        if(m_vctDeleted[i] == strFile)
            return true;
    }
    return false;
}

string ChangeFunction(string strSrc, string strFlag)
{
    int iPos = 0;
    while(1)
    {
        iPos = strSrc.find(strFlag, iPos);
        if(iPos == -1)
            break;
        int iPosStart = iPos + strFlag.length();
        while(1)
        {
            if((iPosStart < strSrc.length()) && ((strSrc[iPosStart] == 0x20) || (strSrc[iPosStart] == '\t')))
                iPosStart ++;
            else
                break;
        }
        int iPosEnd = strSrc.find("(",iPosStart);
        if(iPosEnd != -1)
        {
            while(1)
            {
                if((iPosEnd > iPosStart) && ((strSrc[iPosEnd - 1] == 0x20) || (strSrc[iPosEnd - 1] == '\t')))
                    iPosEnd --;
                else
                    break;
            }
            string strCurFunc = strSrc.substr(iPosStart, iPosEnd - iPosStart);
            string strNew = m_mapFuncChange[strCurFunc];
            if(strNew.length())
                strSrc.replace(iPosStart, strCurFunc.length(), strNew);
            iPos = iPosStart;
        }
        else
        {
            if((strSrc.find("using") != -1) && (strFlag == "::"))//using CNetLayerBase::Init;
            {
                iPosEnd = strSrc.find(";",iPosStart);
                if(iPosEnd != -1)
                {
                    while(1)
                    {
                        if((iPosEnd > iPosStart) && ((strSrc[iPosEnd - 1] == 0x20) || (strSrc[iPosEnd - 1] == '\t')))
                            iPosEnd --;
                        else
                            break;
                    }
                    string strCurFunc = strSrc.substr(iPosStart, iPosEnd - iPosStart);
                    string strNew = m_mapFuncChange[strCurFunc];
                    if(strNew.length())
                        strSrc.replace(iPosStart, strCurFunc.length(), strNew);
                    iPos = iPosStart;
                }
                else
                    break;
            }
            else
                break;
        }
    }

    return strSrc;
}

string ChangeFunction_CodeFile(string strSrc)
{
    int iPos = 0;
    while(1)
    {
        iPos = strSrc.find("(", iPos);
        if(iPos == -1)
            break;
        int iPosEnd = iPos;
        while(1)
        {
            if((iPosEnd > 0) && ((strSrc[iPosEnd - 1] == 0x20) || (strSrc[iPosEnd - 1] == '\t')))
                iPosEnd --;
            else
                break;
        }
        if(iPosEnd < 1)
        {
            iPos ++;
            continue;
        }
        int iPosStart = iPosEnd;
        while(1)
        {
            if((iPosStart > 0) && ((strSrc[iPosStart - 1] == 0x20) || (strSrc[iPosStart - 1] == '\t') || (strSrc[iPosStart - 1] == '(') || (strSrc[iPosStart - 1] == '=') || (strSrc[iPosStart - 1] == ',')))
                break;
            else if(iPosStart == 0)
                break;
            else
                iPosStart --;
        }
        string strCurFunc = strSrc.substr(iPosStart, iPosEnd - iPosStart);
        string strNew = m_mapFuncChange[strCurFunc];
        if(strNew.length())
            strSrc.replace(iPosStart, strCurFunc.length(), strNew);
        iPos ++;
    }

    return strSrc;
}

//((ucInitSize1=clsEcu.p_srtCommand.bgInitSysCmd.GetSize()) == (ucInitSize2=clsEcuCurr->p_srtCommand.bgInitSysCmd.GetSize())) &&
//CProFile clsProFile, clsProFileMask;
//strGetData     = m_clsDataSheet.GetText(binIndex);
string ChangeFunctions(string strSrc, bool bCodeFile)
{
    //////////////////////////////////////////////////////////////////////////先修改函数接口
    int iPosDot = strSrc.find("."), iPosArrow = strSrc.find("->"), iPosAreaSymbol = strSrc.find("::");
    if(iPosDot != -1)
        strSrc = ChangeFunction(strSrc, ".");
    if(iPosArrow != -1)
        strSrc = ChangeFunction(strSrc, "->");
    if(iPosAreaSymbol != -1)
        strSrc = ChangeFunction(strSrc, "::");
    if(bCodeFile)
        strSrc = ChangeFunction_CodeFile(strSrc);

    //////////////////////////////////////////////////////////////////////////再修改类名,类名要反复修改,一行中可能出现多次,比如 EcuInterface.SetCommPort(CEcuInterface::OBD2_PIN7,MAKE_UINT16(CEcuInterface::OBD2_PIN15,CEcuInterface::OBD2_PIN7));
    for(map<string, string>::iterator itClass = m_mapClassChange.begin() ; itClass != m_mapClassChange.end() ; itClass ++)
    {
        string strOld = itClass->first, strNew = itClass->second;
        int iFindPos = 0;
        while(1)
        {
            int iFind = strSrc.find(strOld, iFindPos);
            if(iFind != -1)
            {
                if((strNew.length()) && ((strSrc[iFind + strOld.length()] == 0x20) || (strSrc[iFind + strOld.length()] == '\t') || (strSrc[iFind + strOld.length()] == ':') || (strSrc[iFind + strOld.length()] == '(') || (strSrc[iFind + strOld.length()] == '*')))//空格,Tab,::,构造函数,定义指针对象
                    strSrc.replace(iFind,strOld.length(),strNew);
                else
                    iFindPos = iFind + 1;
            }
            else
                break;
        }
    }
    //////////////////////////////////////////////////////////////////////////再修改其他变更,要反复修改,一行中可能出现多次,比如 CSysInterface::CSysKeyboard::KEY_F1 要替换成 KEY_PRESS_F1
    for(map<string, string>::iterator itOthers = m_mapOtherChange.begin() ; itOthers != m_mapOtherChange.end() ; itOthers ++)
    {
        string strOld = itOthers->first, strNew = itOthers->second;
        while(1)
        {
            int iFind = strSrc.find(strOld);
            if(iFind != -1)
            {
                if(strNew.length())
                    strSrc.replace(iFind,strOld.length(),strNew);
            }
            else
                break;
        }
    }

    return strSrc;
}

///用来搜索文件,这里会搜索所有文件,然后保存你想要的文件类型,这里会保存.EWP  .BAT .H .CPP ///.VCPROJ 等文件,如果你有新的文件类型需要保存,则需要手动添加返回vector和判断命令
///比如要保存.txt文件,vector<CString> &vctTxtFile
///添加判断 if(strExt == _T(".TXT")) vctTxtFile.push_back(strFile);
void SearchDir(CString szFilePath, vector<CString> &vctSourceFile, vector<CString> &vctProjectFile, vector<CString> &vctIarProjectFile, vector<CString> &vctBatFile)
{
    CFileFind finder;
    BOOL bWorking = FALSE;

    if(szFilePath.GetLength())
    {
        szFilePath.TrimRight('\\');
        bWorking = finder.FindFile(szFilePath+_T("\\*.*"));
    }

    while(bWorking)
    {
        bWorking = finder.FindNextFile();
        if (finder.IsDots())
        {
            if((finder.GetFileName() == _T("..")) && (bWorking == FALSE))
                break;
            continue;
        }

        if (finder.IsDirectory())
        {
            CString str = finder.GetFilePath();
            SearchDir(str,vctSourceFile,vctProjectFile,vctIarProjectFile, vctBatFile);
        }
        else
        {
            CString strFile = finder.GetFilePath(), strExt = finder.GetFileName();
            strExt = strExt.Right(strExt.GetLength() - strExt.ReverseFind('.'));
            strExt.MakeUpper();
#ifdef ZP_CHANGE
            if( _T(".EWP") == strExt )///需要保存的文件类型
                vctIarProjectFile.push_back(strFile);
            else if ( _T(".BAT") == strExt )
                vctBatFile.push_back(strFile);
#else
            if((strExt == _T(".H")) || (strExt == _T(".CPP")))
                vctSourceFile.push_back(strFile);
            else if(strExt == _T(".VCPROJ"))
                vctProjectFile.push_back(strFile);
            else if((strExt == _T(".DEP")) || (strExt == _T(".EWP")))
                vctIarProjectFile.push_back(strFile);
#endif

        }
    }
}

UINT FunctionProc(LPVOID pParam)
{
    CSrcToolDlg* pDlg = (CSrcToolDlg*)pParam;

    TCHAR chCurPath[260] = {0};
    ::GetModuleFileName(NULL, chCurPath, MAX_PATH);
    CString strSrcPath = chCurPath;
    strSrcPath = strSrcPath.Left(strSrcPath.ReverseFind('\\')+1);
#ifdef ZP_CHANGE
#else
    strSrcPath += _T("SRC");
    if(GetFileAttributes(strSrcPath) == -1)
    {
        AfxMessageBox(_T("SRC目录不存在!"),MB_ICONERROR);
        pDlg->PostMessage(WM_FUNCTION_MSG,0,0);
        return 0;
    }
#endif

    vector<CString> vctSourceFile, vctProjectFile, vctIarProjectFile, vctBatFile;
    SearchDir(strSrcPath,vctSourceFile,vctProjectFile,vctIarProjectFile, vctBatFile);
    int iProgressMax = vctSourceFile.size() + vctProjectFile.size() + vctIarProjectFile.size() + vctBatFile.size();
    int iProcessCnt = 0;
    pDlg->PostMessage(WM_FUNCTION_MSG, iProgressMax, 2);
    ///下面就是对文件进行真正的修改,这里也是最耗时的地方,在这里我使用的单线程,有兴趣的朋友可以
    ///尝试修改为多线程
    //////////////////////////////////////////////////////////////////////////Iar Project files
    for (unsigned int iIar = 0 ; iIar < vctIarProjectFile.size() ; iIar ++)
    {
        iProcessCnt ++;
        CString strFileName = vctIarProjectFile[iIar], strFileNameTmp = strFileName + _T(".Tmp"), strFileTitle = strFileName.Right(strFileName.GetLength() - strFileName.ReverseFind('\\') - 1);
        g_strMsg = strFileTitle;
        pDlg->PostMessage(WM_FUNCTION_MSG,iProcessCnt,3);

        ifstream fin;
        ofstream fout;
        fin.open(strFileName);
        if(!fin.is_open())
        {
            g_strMsg = _T("文件打开失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        fout.open(strFileNameTmp);
        if(!fout.is_open())
        {
            g_strMsg = _T("文件写入失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        while(!fin.eof())
        {
            string strTemp = "";
            getline(fin,strTemp,'\n');
            if(strTemp.length() < 2)
            {
                fout<<strTemp<<endl;
                continue;
            }
#ifdef ZP_CHANGE
            int nReverse = strTemp.find("NT600_Elite");
            if( nReverse != -1 )//改工程配置
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "NT600_Elite";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp=strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("Std_NT500");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "Std_NT500";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("Std500.a");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "Std500.a";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("ecu.bin");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "ecu.bin";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("car.bmp");
            if( nReverse != -1 )//改工程配置
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "car.bmp";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp=strPre+strFileChange+strPost;
            }
            fout<<strTemp<<endl;
#else
            int nFileFind = strTemp.find("<file>$PROJ_DIR$");
            int nNameFind = strTemp.find("<name>$PROJ_DIR$");
            int nStateFind = strTemp.find("<state>$PROJ_DIR$");
            if((nFileFind != -1) || (nNameFind != -1) || (nStateFind != -1) )//改工程配置
            {
                int iReverse = strTemp.find_last_of('\\');
                if(iReverse != -1)
                {
                    string strPre = strTemp.substr(0, iReverse + 1);
                    string strCurFile = strTemp.substr(iReverse + 1, strTemp.length() - iReverse - 8);
                    string strPost = strTemp.substr(iReverse + 1 + strCurFile.length());
                    transform(strCurFile.begin(), strCurFile.end(), strCurFile.begin(), ::tolower);
                    {
                        string strFileChange = m_mapFileChange[strCurFile];
                        if(strFileChange.length())
                            fout<<strPre<<strFileChange<<strPost<<endl;
                        else
                            fout<<strTemp<<endl;
                    }
                }
            }
            else
                fout<<strTemp<<endl;
#endif          
        }
        fin.close();
        fout.close();
        CFile::Remove(strFileName);
        CFile::Rename(strFileNameTmp, strFileName);
    }   
#ifdef ZP_CHANGE   ///add zp 20170313 14:32:10
    for (unsigned int iBat = 0 ; iBat < vctBatFile.size() ; iBat ++)
    {
        iProcessCnt ++;
        CString strFileName = vctBatFile[iBat], strFileNameTmp = strFileName + _T(".Tmp"), strFileTitle = strFileName.Right(strFileName.GetLength() - strFileName.ReverseFind('\\') - 1);
        g_strMsg = strFileTitle;
        pDlg->PostMessage(WM_FUNCTION_MSG,iProcessCnt,3);

        ifstream fin;
        ofstream fout;
        fin.open(strFileName);
        if(!fin.is_open())
        {
            g_strMsg = _T("文件打开失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        fout.open(strFileNameTmp);
        if(!fout.is_open())
        {
            g_strMsg = _T("文件写入失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        while(!fin.eof())
        {
            string strTemp = "";
            getline(fin,strTemp,'\n');
            if(strTemp.length() < 2)
            {
                fout<<strTemp<<endl;
                continue;
            }
            int nReverse = strTemp.find("NT600_Elite");
            if( nReverse != -1 )//改工程配置
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "NT600_Elite";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp=strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("Std_NT500");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "Std_NT500";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("Std500.a");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "Std500.a";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("ecu.bin");
            if (nReverse != -1)
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "ecu.bin";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp = strPre+strFileChange+strPost;
            }
            nReverse = strTemp.find("car.bmp");
            if( nReverse != -1 )//改工程配置
            {
                string strPre = strTemp.substr(0, nReverse);
                string strCurFile = "car.bmp";
                string strPost = strTemp.substr(nReverse + strCurFile.length());

                string strFileChange = m_mapStringChange[strCurFile];
                if(strFileChange.length())
                    strTemp=strPre+strFileChange+strPost;
            }       
            fout<<strTemp<<endl;        
        }
        fin.close();
        fout.close();
        CFile::Remove(strFileName);
        CFile::Rename(strFileNameTmp, strFileName);
    }
#endif  
    //////////////////////////////////////////////////////////////////////////.vcproj
    for (unsigned int iProj = 0 ; iProj < vctProjectFile.size() ; iProj ++)
    {
        iProcessCnt ++;
        CString strFileName = vctProjectFile[iProj], strFileNameTmp = strFileName + _T(".Tmp"), strFileTitle = strFileName.Right(strFileName.GetLength() - strFileName.ReverseFind('\\') - 1);
        g_strMsg = strFileTitle;
        pDlg->PostMessage(WM_FUNCTION_MSG,iProcessCnt,3);

        ifstream fin;
        ofstream fout;
        fin.open(strFileName);
        if(!fin.is_open())
        {
            g_strMsg = _T("文件打开失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        fout.open(strFileNameTmp);
        if(!fout.is_open())
        {
            g_strMsg = _T("文件写入失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        int iLineNum = 0, iSkipFlag = 0;
        bool bSkip = false;
        while(!fin.eof())
        {
            iLineNum ++;
            string strTemp = "";
            getline(fin,strTemp,'\n');
            if(iSkipFlag == 4)
            {
                bSkip = false;
                iSkipFlag = 0;
            }
            if(bSkip)
            {
                iSkipFlag ++;
                continue;
            }
            if(strTemp.length() < 2)
            {
                fout<<strTemp<<endl;
                continue;
            }
/*          if(strTemp.substr(0,2) == "//")
            {
                fout<<strTemp<<endl;
                continue;
            }*/
            int iRelativePath = strTemp.find("RelativePath");
            if(iRelativePath == -1)//查关键字
            {
                fout<<strTemp<<endl;
                if(strTemp.find("PreprocessorDefinitions") != -1)
                {
                    transform(strTemp.begin(), strTemp.end(), strTemp.begin(), ::tolower);
                    for (unsigned int iKw = 0 ; iKw < m_vctKeyWords.size() ; iKw ++)
                    {
                        if(strTemp.find(m_vctKeyWords[iKw]) != -1)
                            m_vctKeyWordsFound.push_back(_T("工程属性中检测到含有宏定义:") + string2CString(m_vctKeyWords[iKw]));
                    }
                }
            }
            else//改工程配置
            {
                int iReverse = strTemp.find_last_of('\\');
                if(iReverse != -1)
                {
                    string strPre = strTemp.substr(0, iReverse + 1);
                    string strCurFile = strTemp.substr(iReverse + 1, strTemp.length() - iReverse - 2);
                    transform(strCurFile.begin(), strCurFile.end(), strCurFile.begin(), ::tolower);
                    if(FileIsDeleted(strCurFile))//此处处理有点取巧,因为已不再使用的文件在工程配置中刚好都不是最后一个,如果是最后一个则不好处理了
                    {
                        bSkip = true;
                        iSkipFlag = 1;
                        continue;
                    }
                    else
                    {
                        string strFileChange = m_mapFileChange[strCurFile];
                        if(strFileChange.length())
                        {
//                          if(strTemp.find("STD_NT800") != -1)//因某些车型下会有STD中的文件,比如Profile,故此去掉此判断,强制改名
                                fout<<strPre<<strFileChange<<"\""<<endl;
//                          else
//                              fout<<strTemp<<endl;
                        }
                        else
                            fout<<strTemp<<endl;
                    }
                }
            }
        }
        fin.close();
        fout.close();
        CFile::Remove(strFileName);
        CFile::Rename(strFileNameTmp, strFileName);
    }
    //////////////////////////////////////////////////////////////////////////.h .cpp
    for (unsigned int iSource = 0 ; iSource < vctSourceFile.size() ; iSource ++)
    {
        iProcessCnt ++;
        CString strFileName = vctSourceFile[iSource], strFileNameTmp = strFileName + _T(".Tmp");
        CString strFileTitle = strFileName.Right(strFileName.GetLength() - strFileName.ReverseFind('\\') - 1), strExt = strFileTitle.Right(strFileTitle.GetLength() - strFileTitle.ReverseFind('.') - 1);
        g_strMsg = strFileTitle;
        pDlg->PostMessage(WM_FUNCTION_MSG,iProcessCnt,3);

        ifstream fin;
        ofstream fout;
        fin.open(strFileName);
        if(!fin.is_open())
        {
            g_strMsg = _T("文件打开失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        fout.open(strFileNameTmp);
        if(!fout.is_open())
        {
            g_strMsg = _T("文件写入失败 :") + strFileName;
            pDlg->PostMessage(WM_FUNCTION_MSG,1,1);
            continue;
        }
        int iLineNum = 0;
        while(!fin.eof())
        {
            iLineNum ++;
            string strTemp = "", strNew = "";
            getline(fin,strTemp,'\n');
            if(strTemp.length() < 2)
            {
                fout<<strTemp<<endl;
                continue;
            }
/*          if(strTemp.substr(0,2) == "//")
            {
                fout<<strTemp<<endl;
                continue;
            }*/
            int iInclude = strTemp.find("#include");
            if(iInclude != -1)//include
            {
                int iLeft = strTemp.find("\"",iInclude);
                int iRight = strTemp.find("\"",iLeft + 1);
                string strPre = strTemp.substr(0,iLeft + 1), strIncludeFile = strTemp.substr(iLeft + 1, iRight - iLeft - 1);
                int iIncludeFileLen = strIncludeFile.length();
                while(1)
                {
                    if((strIncludeFile[iIncludeFileLen-1] == ' ') || (strIncludeFile[iIncludeFileLen-1] == '\t'))
                        iIncludeFileLen --;
                    else
                        break;
                }
                strIncludeFile = strIncludeFile.substr(0,iIncludeFileLen);
                transform(strIncludeFile.begin(), strIncludeFile.end(), strIncludeFile.begin(), ::tolower);
                if(FileIsDeleted(strIncludeFile))
                {
                    iLineNum --;
                    continue;
                }
                else
                {
                    string strIncludeChange = m_mapFileChange[strIncludeFile];
                    if(strIncludeChange.length())
                    {
                        fout<<strPre<<strIncludeChange<<"\""<<endl;
                        strNew = strPre + strIncludeChange;
                    }
                    else
                    {
                        fout<<strTemp<<endl;
                        strNew = strTemp;
                    }
                }
            }
            else//functions
            {
                bool bCodeFile = false;
                strExt.MakeUpper();
                if((strExt == _T("H")) || (strExt == _T("CPP")))
                    bCodeFile = true;
                strNew = ChangeFunctions(strTemp, bCodeFile);
                fout<<strNew<<endl;
            }
            transform(strNew.begin(), strNew.end(), strNew.begin(), ::tolower);
            for (unsigned int iKw = 0 ; iKw < m_vctKeyWords.size() ; iKw ++)
            {
                if(strNew.find(m_vctKeyWords[iKw]) != -1)
                {
                    CString strLineNum = _T("");
                    strLineNum.Format(_T(" %d : "), iLineNum);
                    m_vctKeyWordsFound.push_back(strFileTitle + strLineNum + string2CString(m_vctKeyWords[iKw]));
                }
            }
        }
        fin.close();
        fout.close();
        CFile::Remove(strFileName);
        CFile::Rename(strFileNameTmp, strFileName);

        /////////////////////////////////////////////////修改文件名,兼容修改STD时使用
        strFileTitle.MakeLower();
        string stringOldFile = CString2string(strFileTitle);
        string stringNewFile = m_mapFileChange[stringOldFile];
        if(stringNewFile.length())
        {
            CString strNewFileTitle = string2CString(stringNewFile);
            CString strLeftFile = strFileName.Left(strFileName.GetLength() - strFileTitle.GetLength());
            CFile::Rename(strFileName,strLeftFile + strNewFileTitle);
        }
    }
    //////////////////////////////////////////////////////////////////////////结束
    pDlg->PostMessage(WM_FUNCTION_MSG,0,0);
    return 0;
}

BOOL CSrcToolDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);         // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon

    // TODO: Add extra initialization here
    SetWindowText(_T("SRC Tool V1.20_20160303_新增IAR工程的支持"));
    GetDlgItem(IDC_STATIC_GROUP_FUNC)->SetWindowText(_T("SRC 处理"));
    GetDlgItem(IDC_STATIC_FUNC_INFO)->SetWindowText(_T("使用说明:\n\n请先将此程序放到要处理的车型根目录中,和车型代码SRC文件夹平级即可。\n处理之前最好先把SRC备份,程序将自动修改代码中的函数接口、类名和工程配置,并查找预设的一些关键字"));
    GetDlgItem(IDC_BUTTON_FUNC_START)->SetWindowText(_T("开始处理"));
    GetDlgItem(IDC_STATIC_GROUP_SEARCH)->SetWindowText(_T("类名或函数名查询"));
    GetDlgItem(IDC_STATIC_SEARCH_INFO)->SetWindowText(_T("使用说明:\n\n此处输入原类名或者原函数接口名,可以查询修改后的结果,支持不完全查询,不分大小写"));
    GetDlgItem(IDC_BUTTON_SEARCH)->SetWindowText(_T("查询"));
    GetDlgItem(IDC_STATIC_SEARCH_REPORT)->SetWindowText(_T("查询结果:"));

    ResetAllData();
    return TRUE;  // return TRUE  unless you set the focus to a control
}

void CSrcToolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CSrcToolDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

// The system calls this function to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CSrcToolDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
///键盘事件处理
BOOL CSrcToolDlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
        return TRUE;
    if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
        return TRUE;
    return CDialog::PreTranslateMessage(pMsg);
}

void CSrcToolDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,0);
    CDialog::OnLButtonDown(nFlags, point);
}

void CSrcToolDlg::ResetAllData()
{
    SetDlgItemText(IDC_STATIC_CURPOS,_T(""));
    m_iTotalFiles = 0;
#ifdef ZP_CHANGE     ///add zp 20170313
    m_mapStringChange.clear();
    m_mapStringChange["NT600_Elite"] = "i400";
    m_mapStringChange["Std_NT500"] = "Std_i300";
    m_mapStringChange["Std500.a"] = "Stdi300.a";
    m_mapStringChange["ecu.bin"] = "comm.bin";
    m_mapStringChange["car.bmp"] = "vehicle.bmp";
#else   
    m_mapClassChange.clear();
    m_mapFuncChange.clear();
    m_mapFileChange.clear();
    m_mapOtherChange.clear();
    m_vctKeyWords.clear();
    m_vctDeleted.clear();
    m_vctKeyWordsFound.clear();
    //////////////////////////////////////////////////////////////////////////要修改的接口类名对应关系添加到此
    m_mapClassChange["CUIBase"] = "CBaseCtrl";
    m_mapClassChange["CUIActTest"] = "CActTestCtrl";
    m_mapClassChange["CUIDataStreamBase"] = "CDataStreamBaseCtrl";
    m_mapClassChange["CUIDataStream"] = "CDataStreamCtrl";
    m_mapClassChange["CUIEcuInfo"] = "CEcuInfoCtrl";
    m_mapClassChange["CUIFreezeFrame"] = "CFreezeFrameCtrl";
    m_mapClassChange["CUIInput"] = "CInputCtrl";
    m_mapClassChange["CUIMenu"] = "CMenuCtrl";
    m_mapClassChange["CUIMessageBox"] = "CMessageBoxCtrl";
    m_mapClassChange["CUIMultiSelected"] = "CMultiSelectCtrl";
    m_mapClassChange["CUIPicture"] = "CPictureCtrl";
    m_mapClassChange["CUIPowerBalance"] = "CPowerBalanceCtrl";
    m_mapClassChange["CUIScanSelect"] = "CDtcScanCtrl";
    m_mapClassChange["CUITimeProgress"] = "CTimeProgressCtrl";
    m_mapClassChange["CUITroubleCode"] = "CTroubleCodeCtrl";
    m_mapClassChange["CDataSheet"] = "CTextLibrary";
    m_mapClassChange["CProFile"] = "CFileManager";
    m_mapClassChange["CEcuInterface"] = "CVehicleComm";
    m_mapClassChange["CViewUIActTest"] = "CActTestCtrlView";
    m_mapClassChange["CViewUIDataStream"] = "CDataStreamCtrlView";
    m_mapClassChange["CViewUIEcuInfo"] = "CEcuInfoCtrlView";
    m_mapClassChange["CViewUIFreezeFrame"] = "CFreezeFrameCtrlView";
    m_mapClassChange["CViewUIInput"] = "CInputCtrlView";
    m_mapClassChange["CViewUIMenu"] = "CMenuCtrlView";
    m_mapClassChange["CViewUIMenuPath"] = "CMenuPathCtrlView";
    m_mapClassChange["CViewUIMessageBox"] = "CMessageBoxCtrlView";
    m_mapClassChange["CViewUIMultiSelected"] = "CMultiSelectCtrlView";
    m_mapClassChange["CViewUIPicture"] = "CPictureCtrlView";
    m_mapClassChange["CViewUIPowerBalance"] = "CPowerBalanceCtrlView";
    m_mapClassChange["CViewUIScanSelect"] = "CDtcScanCtrlView";
    m_mapClassChange["CViewUITimeProgress"] = "CTimeProgressCtrlView";
    m_mapClassChange["CViewUITroubleCode"] = "CTroubleCodeCtrlView";

    //////////////////////////////////////////////////////////////////////////要修改的接口函数对应关系添加到此
    m_mapFuncChange["Init"] = "InitCtrl";
    m_mapFuncChange["Add"] = "AddOneItem";
    m_mapFuncChange["Show"] = "ShowCtrl";

    m_mapFuncChange["SetLockFirstRow"] = "SetFirstRowFixed";
    m_mapFuncChange["AddButton"] = "AddOneBtn";
    m_mapFuncChange["SetButtonFocus"] = "SetBtnFocus";
    m_mapFuncChange["SetButtonStatus"] = "SetBtnStatus";
    m_mapFuncChange["SetButtonText"] = "SetBtnText";
    m_mapFuncChange["SetItem"] = "SetItemValue";
    m_mapFuncChange["SetItemThenSetUnit"] = "SetItemAndUnit";
    m_mapFuncChange["GetSelectionItem"] = "GetCurSelItem";
    m_mapFuncChange["SetUnit"] = "SetItemUnit";
    m_mapFuncChange["SetName"] = "SetItemName";
    m_mapFuncChange["DelItem"] = "DeleteOneItem";
    m_mapFuncChange["EnableEsc"] = "SetBackBtnStatus";
    m_mapFuncChange["SetTitle"] = "SetCaption";
    m_mapFuncChange["SetColWidth"] = "SetColumnWid";
    m_mapFuncChange["GetCurSelected"] = "GetCurSelectItem";
    m_mapFuncChange["FromUIDataStream"] = "ByDataStreamCtrl";

    m_mapFuncChange["EnableReferenceColumn"] = "SetReferenceCol";
    m_mapFuncChange["SetHelp"] = "SetHelpBtn";

    m_mapFuncChange["SetButtonCaption"] = "SetBtnCaption";
    m_mapFuncChange["EnableMenu"] = "SetMenuMode";

    m_mapFuncChange["SetSoftKeyboard"] = "SetKeyboardShow";
    m_mapFuncChange["ShowManyCombo"] = "ShowMultiInput";
    m_mapFuncChange["ShowManyEdit"] = "ShowMultiEdit";
    m_mapFuncChange["SetNullInput"] = "SetInputEmpty";
    m_mapFuncChange["GetStringManyCombo"] = "GetMultiInputVctStr";
    m_mapFuncChange["SetSplitStringSeparator"] = "SetSeparatorString";
    m_mapFuncChange["GetCurrenSelManyCombo"] = "GetMultiInputCurSel";
    m_mapFuncChange["SetComboPromptFormat"] = "SetInputPromptFmt";
    m_mapFuncChange["SetSaveToFile"] = "SetSaveHistory";
    m_mapFuncChange["GetInterger"] = "GetIntValue";
    m_mapFuncChange["GetString"] = "GetStringValue";

    m_mapFuncChange["adsShowMenu"] = "FxShowMenu";
    m_mapFuncChange["adsMulShowMenu"] = "FxShowMultiMenu";
    m_mapFuncChange["adsSpecTitleShowMenu"] = "FxShowUniqueMenu";
    m_mapFuncChange["AddCString"] = "AddOneItem";
    m_mapFuncChange["SetDisplayIndex"] = "SetShowIndex";
    m_mapFuncChange["ShowSpecialButton"] = "ShowCustomButton";

    m_mapFuncChange["adsProgressBar"] = "FxProgressBar";
    m_mapFuncChange["adsMessageBox"] = "FxShowMessageBox";
    m_mapFuncChange["SetBusy"] = "SetBusyStatus";
    m_mapFuncChange["AddButtonFree"] = "AddCustomButton";

    m_mapFuncChange["SetMaxItemSelect"] = "SetSelectMaxNum";

    m_mapFuncChange["SetPicture"] = "SetPictureInfo";
    m_mapFuncChange["AddText"] = "AddPictureText";

    m_mapFuncChange["AddPower"] = "AddOnePower";
    m_mapFuncChange["ModifyPower"] = "ModifyOnePower";
    m_mapFuncChange["SetPower"] = "SetOnePower";
    m_mapFuncChange["Reset"] = "ResetCtrl";

    m_mapFuncChange["SetValue"] = "SetItemValue";
    m_mapFuncChange["SetDTC"] = "SetHaveDtc";
    m_mapFuncChange["FinishedScan"] = "FinishScan";
    m_mapFuncChange["BeginErase"] = "StartClearDtc";
    m_mapFuncChange["EndErase"] = "FinishClearDtc";
    m_mapFuncChange["IsErasing"] = "IsClearingDtc";

    m_mapFuncChange["SetESCBtnEnable"] = "EnableBackButton";
    m_mapFuncChange["SetUpText"] = "SetTextAbove";
    m_mapFuncChange["SetDownText"] = "SetTextBelow";

    m_mapFuncChange["SetFreezeFrame"] = "SetItemFreezeFrame";
    m_mapFuncChange["SetOnlyCodeColumHelp"] = "SetShowCodeHelpOnly";

    m_mapFuncChange["adsGetTextFromDsHelpLib"] = "FxGetDsHelpString";
    m_mapFuncChange["adsGetTextFromTextLibEx"] = "FxGetStdStringEx";
    m_mapFuncChange["adsGetTextFromTextLib"] = "FxGetStdString";
    m_mapFuncChange["adsGetStdText_CString"] = "FxGetStdCString";
    m_mapFuncChange["adsGetStdText"] = "FxGetStdStringBase";
    m_mapFuncChange["ClearVectorText"] = "ResetMemoryBuffer";
    m_mapFuncChange["SearchId"] = "SearchBinary";
    m_mapFuncChange["SearchIdEx"] = "SearchBinaryEx";
    m_mapFuncChange["GetText"] = "GetStringByBinary";
    m_mapFuncChange["SelectWhile"] = "SearchWithCondition";
    m_mapFuncChange["SetReadFileToMemery"] = "SetMemoryBufferMode";
    m_mapFuncChange["GetLanguage"] = "GetLanguageCode";
    m_mapFuncChange["DecrypText"] = "DecodeString";
    m_mapFuncChange["Encryption"] = "EncodeString";
    m_mapFuncChange["OnAuthorizationFile"] = "EncodeFileName";

    m_mapFuncChange["Reset"] = "ResetCtrl";
    m_mapFuncChange["Set"] = "InitManager";
    m_mapFuncChange["GetValue"] = "GetItemValue";
    m_mapFuncChange["SetValue"] = "SetItemValue";
    m_mapFuncChange["GetLine"] = "GetOneLine";

    m_mapFuncChange["SetBps"] = "SetBaudRate";
    m_mapFuncChange["SetCommTime"] = "SetTimeParameter";
    m_mapFuncChange["SetIoPort"] = "SetCommPort";
    m_mapFuncChange["SetIoStatu"] = "SetPortStatus";
    m_mapFuncChange["GetStatus"] = "GetPortStatus";
    m_mapFuncChange["SetProtocol"] = "SetCommProtocol";

    m_mapFuncChange["Delete"] = "DeleteByte";
    m_mapFuncChange["SetAt"] = "SetByteAt";
    m_mapFuncChange["GetAt"] = "GetByteAt";
    m_mapFuncChange["GetSize"] = "GetByteCount";
    m_mapFuncChange["SetSize"] = "SetByteCount";
    //////////////////////////////////////////////////////////////////////////要修改的代码文件名对应关系添加到此,只需添加.h即可,.cpp后续会自动处理添加
    m_mapFileChange["UIBase.h"] = "BaseCtrl.h";
    m_mapFileChange["UIActTest.h"] = "ActTestCtrl.h";
    m_mapFileChange["UIDataStream.h"] = "DataStreamCtrl.h";
    m_mapFileChange["UIDataStreamBase.h"] = "DataStreamBaseCtrl.h";
    m_mapFileChange["UIEcuInfo.h"] = "EcuInfoCtrl.h";
    m_mapFileChange["UIFreezeFrame.h"] = "FreezeFrameCtrl.h";
    m_mapFileChange["UIInput.h"] = "InputCtrl.h";
    m_mapFileChange["UIMenu.h"] = "MenuCtrl.h";
    m_mapFileChange["UIMessageBox.h"] = "MessageBoxCtrl.h";
    m_mapFileChange["UIMultiSelected.h"] = "MultiSelectCtrl.h";
    m_mapFileChange["UIPicture.h"] = "PictureCtrl.h";
    m_mapFileChange["UIPowerBalance.h"] = "PowerBalanceCtrl.h";
    m_mapFileChange["UIScanSelect.h"] = "DtcScanCtrl.h";
    m_mapFileChange["UITimeProgress.h"] = "TimeProgressCtrl.h";
    m_mapFileChange["UITroubleCode.h"] = "TroubleCodeCtrl.h";
    m_mapFileChange["DataSheet.h"] = "TextLibrary.h";
    m_mapFileChange["ProFile.h"] = "FileManager.h";
    m_mapFileChange["EcuInterface.h"] = "VehicleComm.h";
    m_mapFileChange["ViewUIActTest.h"] = "ActTestCtrlView.h";
    m_mapFileChange["ViewUIDataStream.h"] = "DataStreamCtrlView.h";
    m_mapFileChange["ViewUIEcuInfo.h"] = "EcuInfoCtrlView.h";
    m_mapFileChange["ViewUIFreezeFrame.h"] = "FreezeFrameCtrlView.h";
    m_mapFileChange["ViewUIInput.h"] = "InputCtrlView.h";
    m_mapFileChange["ViewUIMenu.h"] = "MenuCtrlView.h";
    m_mapFileChange["ViewUIMenuPath.h"] = "MenuPathCtrlView.h";
    m_mapFileChange["ViewUIMessageBox.h"] = "MessageBoxCtrlView.h";
    m_mapFileChange["ViewUIMultiSelected.h"] = "MultiSelectCtrlView.h";
    m_mapFileChange["ViewUIPicture.h"] = "PictureCtrlView.h";
    m_mapFileChange["ViewUIPowerBalance.h"] = "PowerBalanceCtrlView.h";
    m_mapFileChange["ViewUIScanSelect.h"] = "DtcScanCtrlView.h";
    m_mapFileChange["ViewUITimeProgress.h"] = "TimeProgressCtrlView.h";
    m_mapFileChange["ViewUITroubleCode.h"] = "TroubleCodeCtrlView.h";

    //////////////////////////////////////////////////////////////////////////其他变更(既不是类名也不是函数名)的对应关系添加到此
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_UP"] = "KEY_PRESS_UP";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_DOWN"] = "KEY_PRESS_DOWN";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_LEFT"] = "KEY_PRESS_LEFT";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_RIGHT"] = "KEY_PRESS_RIGHT";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_F1"] = "KEY_PRESS_F1";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_F2"] = "KEY_PRESS_F2";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_F3"] = "KEY_PRESS_F3";
    m_mapOtherChange["CSysInterface::CSysKeyboard::KEY_HELP"] = "KEY_PRESS_HELP";

    //////////////////////////////////////////////////////////////////////////要查找的关键字对应关系添加到此
    m_vctKeyWords.push_back("DAS_HOST_PROG");
    m_vctKeyWords.push_back("MAXI_DAS_PROG");
    m_vctKeyWords.push_back("WIN32_608PC");
    m_vctKeyWords.push_back("MAXIDAS");
    m_vctKeyWords.push_back("MAXICHECK");
    m_vctKeyWords.push_back("MAXIDIAGELITE");
    m_vctKeyWords.push_back("MaxiCHK");
    m_vctKeyWords.push_back("autel");
    m_vctKeyWords.push_back("hyy");
    m_vctKeyWords.push_back("jar");
    m_vctKeyWords.push_back("wcx");
    m_vctKeyWords.push_back("pxx");
    m_vctKeyWords.push_back("panxiangxi");
    m_vctKeyWords.push_back("DJM");
    m_vctKeyWords.push_back("zyc");
    m_vctKeyWords.push_back("drx");

    //////////////////////////////////////////////////////////////////////////有可能会遇到的已不再使用的文件名添加到此,以便程序删除工程配置,删除#include
    m_vctDeleted.push_back("Beep.h");
    m_vctDeleted.push_back("Beep.cpp");
    m_vctDeleted.push_back("DasCtrl.h");
    m_vctDeleted.push_back("DasCtrl.cpp");
    m_vctDeleted.push_back("BCMenu.h");
    m_vctDeleted.push_back("BCMenu.cpp");
    m_vctDeleted.push_back("BtnST.h");
    m_vctDeleted.push_back("BtnST.cpp");
    m_vctDeleted.push_back("CeBtnST.h");
    m_vctDeleted.push_back("CeBtnST.cpp");
    m_vctDeleted.push_back("CeXDib.h");
    m_vctDeleted.push_back("CeXDib.cpp");
    m_vctDeleted.push_back("chatsocket.h");
    m_vctDeleted.push_back("chatsocket.cpp");
    m_vctDeleted.push_back("ComboBoxCustom.h");
    m_vctDeleted.push_back("ComboBoxCustom.cpp");
    m_vctDeleted.push_back("CommonMessage.h");
    m_vctDeleted.push_back("CommonMessage.cpp");
    m_vctDeleted.push_back("Explorer.h");
    m_vctDeleted.push_back("Explorer.cpp");
    m_vctDeleted.push_back("HeaderCtrlExt.h");
    m_vctDeleted.push_back("HeaderCtrlExt.cpp");
    m_vctDeleted.push_back("Msg.h");
    m_vctDeleted.push_back("Msg.cpp");
    m_vctDeleted.push_back("newres.h");
    m_vctDeleted.push_back("newres.cpp");
    m_vctDeleted.push_back("Printer.h");
    m_vctDeleted.push_back("Printer.cpp");
    m_vctDeleted.push_back("ShadeButtonST.h");
    m_vctDeleted.push_back("ShadeButtonST.cpp");
    m_vctDeleted.push_back("MenuEx.h");
    m_vctDeleted.push_back("MenuEx.cpp");
    m_vctDeleted.push_back("NetLog.h");
    m_vctDeleted.push_back("NetLog.cpp");
    m_vctDeleted.push_back("SipEdit.h");
    m_vctDeleted.push_back("SipEdit.cpp");
    m_vctDeleted.push_back("StaticEx.h");
    m_vctDeleted.push_back("StaticEx.cpp");
    m_vctDeleted.push_back("SysInterface.h");
    m_vctDeleted.push_back("SysInterface.cpp");
    m_vctDeleted.push_back("LinkBaseCan.h");
    m_vctDeleted.push_back("LinkBaseCan.cpp");
    m_vctDeleted.push_back("LinkLayerBase.h");
    m_vctDeleted.push_back("LinkLayerBase.cpp");

    //////////////////////////////////////////////////////////////////////////其他处理
    map<string, string> mpTmp;
    for (map<string, string>::iterator itMap = m_mapFileChange.begin() ; itMap != m_mapFileChange.end() ; itMap ++)
    {
        string strOld = itMap->first, strNew = itMap->second;
        transform(strOld.begin(), strOld.end(), strOld.begin(), ::tolower);
        mpTmp[strOld] = strNew;

        int iOldExt = strOld.find("."), iNewExt = strNew.find(".");
        strOld = strOld.substr(0,iOldExt) + ".cpp", strNew = strNew.substr(0,iNewExt) + ".cpp";
        mpTmp[strOld] = strNew;
    }
    m_mapFileChange.clear();
    m_mapFileChange = mpTmp;

    for (unsigned int iVct = 0 ; iVct < m_vctKeyWords.size() ; iVct ++)
    {
        string strOld = m_vctKeyWords[iVct];
        transform(strOld.begin(), strOld.end(), strOld.begin(), ::tolower);
        m_vctKeyWords[iVct] = strOld;
    }

    for (unsigned int iVct = 0 ; iVct < m_vctDeleted.size() ; iVct ++)
    {
        string strOld = m_vctDeleted[iVct];
        transform(strOld.begin(), strOld.end(), strOld.begin(), ::tolower);
        m_vctDeleted[iVct] = strOld;
    }
#endif  
}

void CSrcToolDlg::OnBnClickedButtonFuncStart()
{
    // TODO: Add your control notification handler code here
    GetDlgItem(IDC_BUTTON_FUNC_START)->EnableWindow(FALSE);
    AfxBeginThread(FunctionProc,this,THREAD_PRIORITY_NORMAL);
}

void CSrcToolDlg::OnBnClickedButtonSearch()
{
    // TODO: Add your control notification handler code here
    SetDlgItemText(IDC_EDIT_SEARCH_OUTPUT,_T(""));

    CString strKey = _T("");
    GetDlgItemText(IDC_EDIT_SEARCH_INPUT,strKey);
    if(strKey.GetLength() < 2)
    {
        SetDlgItemText(IDC_EDIT_SEARCH_OUTPUT,_T("请输入最少2个长度进行查询!"));
        return;
    }
    vector<string> vctRet;
    string strSearch = CString2string(strKey);
    transform(strSearch.begin(), strSearch.end(), strSearch.begin(), ::tolower);

    for (map<string, string>::iterator itMap = m_mapClassChange.begin() ; itMap != m_mapClassChange.end() ; itMap ++)
    {
        string strOld = itMap->first, strNew = itMap->second;
        string strCmp = strOld;
        transform(strCmp.begin(), strCmp.end(), strCmp.begin(), ::tolower);
        if((strCmp.find(strSearch) != -1) && (strNew.length() > 0))
            vctRet.push_back(strOld + " --> " + strNew);
    }

    for (map<string, string>::iterator itMap = m_mapFuncChange.begin() ; itMap != m_mapFuncChange.end() ; itMap ++)
    {
        string strOld = itMap->first, strNew = itMap->second;
        string strCmp = strOld;
        transform(strCmp.begin(), strCmp.end(), strCmp.begin(), ::tolower);
        if((strCmp.find(strSearch) != -1) && (strNew.length() > 0))
            vctRet.push_back(strOld + " --> " + strNew);
    }

    if(vctRet.size() == 0)
    {
        SetDlgItemText(IDC_EDIT_SEARCH_OUTPUT,_T("没有查询到符合条件的项!"));
        return;
    }
    for (unsigned int iRet = 0 ; iRet < vctRet.size() ; iRet ++)
    {
        CString strMsg = string2CString(vctRet[iRet]);
        AppendMsgShow(strMsg, IDC_EDIT_SEARCH_OUTPUT);
    }
    GetDlgItem(IDC_EDIT_SEARCH_OUTPUT)->PostMessage(WM_VSCROLL, SB_BOTTOM,0);
}

LRESULT CSrcToolDlg::OnFunctionMsg(WPARAM wParam,LPARAM lParam)
{
    int iMsgType = (int)lParam, iValue = (int)wParam;
    if(iMsgType == 0)//Finish
    {
        GetDlgItem(IDC_BUTTON_FUNC_START)->EnableWindow(TRUE);
        AppendMsgShow(_T(""), IDC_EDIT_FUNC_OUTPUT);
        if(m_vctKeyWordsFound.size())
            AppendMsgShow(_T("检测到含有关键字的文件信息如下:"), IDC_EDIT_FUNC_OUTPUT);
        for (unsigned int iFound = 0 ; iFound < m_vctKeyWordsFound.size() ; iFound ++)
            AppendMsgShow(m_vctKeyWordsFound[iFound], IDC_EDIT_FUNC_OUTPUT);
        AppendMsgShow(_T("操作完成"), IDC_EDIT_FUNC_OUTPUT);
        GetDlgItem(IDC_EDIT_FUNC_OUTPUT)->PostMessage(WM_VSCROLL, SB_BOTTOM,0);
        ResetAllData();
    }
    else if(iMsgType == 1)//Show string
        AppendMsgShow(g_strMsg, IDC_EDIT_FUNC_OUTPUT);
    else if(iMsgType == 2)//Set Progress Range
    {
        m_iTotalFiles = iValue;
        m_progress.SetRange(0,iValue);
        CString strTotal = _T("");
        strTotal.Format(_T("检测到共有 %d 个文件需要处理"),iValue);
        AppendMsgShow(strTotal,IDC_EDIT_FUNC_OUTPUT);
    }
    else if(iMsgType == 3)//Set Progress Pos
    {
        m_progress.SetPos(iValue);
        CString strCurPos = _T("");
        strCurPos.Format(_T("%d / %d : "),iValue,m_iTotalFiles);
        SetDlgItemText(IDC_STATIC_CURPOS,strCurPos + g_strMsg);
    }
    return 0;
}

void CSrcToolDlg::AppendMsgShow(CString strMsg, UINT uIdCtrl)
{
    CString strHave = _T("");
    GetDlgItemText(uIdCtrl,strHave);
    if(strHave.GetLength())
        strHave += _T("\r\n");
    strHave += strMsg;
    SetDlgItemText(uIdCtrl,strHave);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值