// PicMakingThread.cpp : 实现文件 // #include "stdafx.h" #include "mtk_pic_res_mak_tool.h" #include "PicMakingThread.h" #include "mtk_pic_res_mak_tooldlg.h" #include <shlwapi.h> // CPicMakingThread #ifdef UNICODE_hh #define TSNOTFIND wstring::npos #else #define TSNOTFIND string::npos #endif #if 1 LPTSTR ExtractFilePath(LPTSTR file) { //TCHAR strBuf[MAX_PATH] = {0}; LPTSTR p = StrRChr(file,NULL,'//'); *p = 0; return file; } LPTSTR ExtractFileName(LPTSTR file) { LPTSTR p = StrRChr(file,NULL,'//'); return ++p; } LPTSTR ExtractFileExt(LPTSTR file) { LPTSTR p = StrRChr(file,NULL,'.'); return ++p; } LPTSTR ExtractFileNameWithoutExt(LPTSTR file) { LPTSTR p = ExtractFileName(file); LPTSTR p1 = StrRChr(p,NULL,'.'); *p1 = 0; return p; } #endif char * ExtractFilePathA(char * file) { //TCHAR strBuf[MAX_PATH] = {0}; char * p = strrchr(file,'//'); *p = 0; return file; } char * ExtractFileNameA(char * file) { char * p = strrchr(file,'//'); return ++p; } char * ExtractFileExtA(char * file) { char * p = strrchr(file,'.'); return ++p; } char * ExtractFileNameWithoutExtA(char * file) { char * p = ExtractFileNameA(file); char * p1 = strrchr(p,'.'); *p1 = 0; return p; } wchar_t * ExtractFilePathW(wchar_t * file) { //TCHAR strBuf[MAX_PATH] = {0}; wchar_t * p = wcsrchr(file,'//'); *p = 0; return file; } wchar_t * ExtractFileNameW(wchar_t * file) { wchar_t * p = wcsrchr(file,'//'); return ++p; } wchar_t * ExtractFileExtW(wchar_t * file) { wchar_t * p = wcsrchr(file,'.'); return ++p; } wchar_t * ExtractFileNameWithoutExtW(wchar_t * file) { wchar_t * p = ExtractFileNameW(file); wchar_t * p1 = wcsrchr(p,'.'); *p1 = 0; return p; } CString MyGetFileName(LPCTSTR file) { //CString tem = file; LPTSTR pbuf = new TCHAR[(_tcslen(file) + 1) * sizeof(TCHAR)]; memset(pbuf,0,(_tcslen(file) + 1) * sizeof(TCHAR)); memcpy(pbuf,file,_tcslen(file) * sizeof(TCHAR)); CString re = ExtractFileNameWithoutExt(pbuf); delete[] pbuf; return re; } void MakeUpper_stl(string & s) { int len = s.length(); for(int i = 0 ; i < len ; ++i) { s[i] = toupper(s[i]); } } string Replace_FileName_with_(string & str) { int len = str.length(); for(int i = 0 ; i < len ; ++i) { if(str[i] == '//') str[i] = '_'; else if(str[i] == ':') str[i] = '_'; else if(str[i] == '.') str[i] = '_'; } return str; } string MyGetFileNameA(const char * file) { char * pbuf = new char[(strlen(file) + 1) ]; memset(pbuf,0,(strlen(file) + 1) ); memcpy(pbuf,file,strlen(file) ); string re = ExtractFileNameWithoutExtA(pbuf); delete[] pbuf; return re; } IMPLEMENT_DYNCREATE(CPicMakingThread, CWinThread) CPicMakingThread::CPicMakingThread() { } CPicMakingThread::~CPicMakingThread() { } BOOL CPicMakingThread::InitInstance() { // TODO: 在此执行任意逐线程初始化 //CWnd* pMainWnd = AfxGetMainWnd( ); #if 0 Cmtk_pic_res_mak_toolDlg * pDlg = (Cmtk_pic_res_mak_toolDlg *)g_pDlg; if(pDlg) { WIN32_FIND_DATA wfd; CString filePattern; pDlg->m_edtPath.GetWindowText(filePattern); if(filePattern[filePattern.GetLength() - 1] != '//') filePattern += "//"; CString strPath(filePattern); filePattern += "*.*"; HANDLE hFind = FindFirstFile(filePattern,&wfd); if(hFind != INVALID_HANDLE_VALUE) { CString tem(strPath); tem += wfd.cFileName; tem.MakeUpper(); if(tem.Find(_T(".GIF")) >= 0 || tem.Find(_T(".BMP")) >= 0 ) { m_strImgFiles.push_back((LPCTSTR)tem); } while( FindNextFile(hFind,&wfd) ) { tem = strPath; tem += wfd.cFileName; tem.MakeUpper(); if(tem.Find(_T(".GIF")) >= 0 || tem.Find(_T(".BMP")) >= 0 ) { m_strImgFiles.push_back((LPCTSTR)tem); } } FindClose(hFind); } } #else Cmtk_pic_res_mak_toolDlg * pDlg = (Cmtk_pic_res_mak_toolDlg *)g_pDlg; if(pDlg) { WIN32_FIND_DATAA wfd; string filePattern; //pDlg->m_edtPath.GetWindowText(filePattern); char file_path[MAX_PATH] = {0}; GetWindowTextA(pDlg->m_edtPath.GetSafeHwnd(),file_path,sizeof(file_path)); filePattern = file_path; if(filePattern[filePattern.length() - 1] != '//') filePattern += "//"; string strPath(filePattern); filePattern += "*.*"; HANDLE hFind = FindFirstFileA(filePattern.c_str(),&wfd); if(hFind != INVALID_HANDLE_VALUE) { string tem(strPath); tem += wfd.cFileName; MakeUpper_stl(tem); if(tem.find(".GIF") != TSNOTFIND || tem.find(".BMP") != TSNOTFIND ) { m_strImgFiles.push_back(tem.c_str()); } while( FindNextFileA(hFind,&wfd) ) { tem = strPath; tem += wfd.cFileName; MakeUpper_stl(tem); if(tem.find(".GIF") != TSNOTFIND || tem.find(".BMP") != TSNOTFIND ) { m_strImgFiles.push_back(tem.c_str()); } } FindClose(hFind); } pDlg->MakeThdPtrEmpty(); } #endif return TRUE; } int CPicMakingThread::ExitInstance() { // TODO: 在此执行任意逐线程清理 return CWinThread::ExitInstance(); } int CPicMakingThread::Run( ) { #if 0 //uncode version TCHAR temBuf[MAX_PATH] = {0}; size_t size = m_strImgFiles.size(); Cmtk_pic_res_mak_toolDlg * pDlg = (Cmtk_pic_res_mak_toolDlg *)g_pDlg; if(!pDlg) return -1; if(size) { CFile flOutputFile; pDlg->m_cpTotalProgress.SetPos(0); pDlg->m_cpTotalProgress.SetRange(0,size - 1); pDlg->m_pcCurrentProgress.SetPos(0); for(size_t i = 0 ; i < size ; ++i) { memset(temBuf,0,sizeof(temBuf)); if(i == 0) { memcpy(temBuf,m_strImgFiles[i].c_str(),m_strImgFiles[i].length() * sizeof(TCHAR)); ExtractFilePath(temBuf); CString tt(temBuf); tt += _T("//__mtk_img_res_output.txt"); flOutputFile.Open(tt,CFile::modeCreate | CFile::modeWrite); CString strHeader("#if ( defined (MMI_ON_WIN32) || !defined (__MTK_TARGET__) )/r/n/t#define __align(x)/r/n#endif/r/n/r/n/r/n"); //flOutputFile.Write(_T("#if ( defined (MMI_ON_WIN32) || !defined (__MTK_TARGET__) )/r/n/t"),_tcslen(_T("/r/n")) * sizeof(TCHAR)); flOutputFile.Write((LPCTSTR)strHeader,strHeader.GetLength() * sizeof(TCHAR)); } CFile file__(m_strImgFiles[i].c_str(),CFile::modeRead); ULONGLONG file_len = file__.GetLength(); ULONGLONG total_readed = 0; BYTE buf_[16] = {0}; for(ULONGLONG j = 0 ; total_readed < file_len ;) { if(j == 0) { CString sC (_T("__align(4) const unsigned char ")); sC += MyGetFileName(m_strImgFiles[i].c_str()); sC += _T("[] = /r/n{/r/n/t"); if(m_strImgFiles[i].find(_T(".GIF")) != TSNOTFIND) { TCHAR _t_h_buf[200] = _T("0x03, 0x00, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x00, 0x00,/r/n/t"); TCHAR _t_h_buf1[200] = {0}; int filelen = (int)file_len; BYTE myByteBuf[4] = {0}; myByteBuf[0] = file_len & 0xff; myByteBuf[1] = (file_len >> 8) & 0xff; myByteBuf[2] = (file_len >> 16) & 0xff; myByteBuf[3] = (file_len >> 24) & 0xff; _stprintf(_t_h_buf1,_t_h_buf,myByteBuf[0],myByteBuf[1],myByteBuf[2],myByteBuf[3]); sC += _t_h_buf1; } else { TCHAR _t_h_buf[200] = _T("0x01, 0x00, 0x%02X, 0x%02X, 0x%02X, 0x%02X,/r/n/t"); TCHAR _t_h_buf1[200] = {0}; int filelen = (int)file_len; BYTE myByteBuf[4] = {0}; myByteBuf[0] = file_len & 0xff; myByteBuf[1] = (file_len >> 8) & 0xff; myByteBuf[2] = (file_len >> 16) & 0xff; myByteBuf[3] = (file_len >> 24) & 0xff; _stprintf(_t_h_buf1,_t_h_buf,myByteBuf[0],myByteBuf[1],myByteBuf[2],myByteBuf[3]); sC += _t_h_buf1; } flOutputFile.Write((LPCTSTR)sC,sC.GetLength() * sizeof(TCHAR)); pDlg->m_pcCurrentProgress.SetRange32(0,(int)file_len); } else { CString sC("/t"); flOutputFile.Write((LPCTSTR)sC,sC.GetLength() * sizeof(TCHAR)); } j = file__.Read(buf_,sizeof(buf_)); total_readed += j; CString sContent; for(ULONGLONG z = 0; z < j ; ++z) { TCHAR __t_buf[20] = {0}; _stprintf(__t_buf,_T("0x%02X,"),buf_[z]); sContent += __t_buf; } if(total_readed >= file_len) { if(sContent[sContent.GetLength() - 1] == ',') sContent.SetAt(sContent.GetLength() - 1, '/t'); } sContent += _T("/r/n"); flOutputFile.Write((LPCTSTR)sContent,sContent.GetLength() * sizeof(TCHAR)); pDlg->m_pcCurrentProgress.SetPos((int)total_readed); } file__.Close(); flOutputFile.Write(_T("};/r/n"),_tcslen(_T("};/r/n")) * sizeof(TCHAR)); pDlg->m_cpTotalProgress.SetPos(i); }/*end if( size) */ if((HANDLE)flOutputFile != INVALID_HANDLE_VALUE) flOutputFile.Close(); } CWnd* pWnd = pDlg->GetDlgItem(IDC_BUTTON1); pWnd->EnableWindow(TRUE); pWnd = pDlg->GetDlgItem(IDC_BUTTON2); pWnd->EnableWindow(TRUE); //pWnd = GetDlgItem(IDC_EDIT1); //pWnd->EnableWindow(TRUE); pDlg->m_edtPath.EnableWindow(TRUE); pDlg->MessageBox(_T("处理完毕,如转化完成是unicode编码,则使用ue来打开txt文件。"),_T("MTK资源编辑完成")); pDlg->m_cpTotalProgress.SetPos(0); pDlg->m_pcCurrentProgress.SetPos(0); #else char temBuf[MAX_PATH] = {0}; size_t size = m_strImgFiles.size(); Cmtk_pic_res_mak_toolDlg * pDlg = (Cmtk_pic_res_mak_toolDlg *)g_pDlg; if(!pDlg) return -1; if(size) { CFile flOutputFile,flheader,flGifFile; pDlg->m_cpTotalProgress.SetPos(0); pDlg->m_cpTotalProgress.SetRange(0,size > 1 ? size - 1 : 1); pDlg->m_pcCurrentProgress.SetPos(0); for(size_t i = 0 ; i < size ; ++i) { memset(temBuf,0,sizeof(temBuf)); USES_CONVERSION; CFile file__(A2W(m_strImgFiles[i].c_str()),CFile::modeRead); if (m_strImgFiles[i].find(".TXT") != TSNOTFIND) { memcpy(temBuf,m_strImgFiles[i].c_str(),m_strImgFiles[i].length()); ExtractFilePathA(temBuf); CString GIFName(temBuf); } else { if(i == 0) { memcpy(temBuf,m_strImgFiles[i].c_str(),m_strImgFiles[i].length()); ExtractFilePathA(temBuf); CString tt(temBuf),tt1(temBuf); tt += "//__mtk_img_res_output.c"; tt1+= "//__mtk_img_res_output.h"; flOutputFile.Open(tt,CFile::modeCreate | CFile::modeWrite); flheader.Open(tt1,CFile::modeCreate | CFile::modeWrite); string strHeader("#if ( defined (MMI_ON_WIN32) || !defined (__MTK_TARGET__) )/r/n/t#define __align(x)/r/n#endif/r/n/r/n/r/n"); //flOutputFile.Write(_T("#if ( defined (MMI_ON_WIN32) || !defined (__MTK_TARGET__) )/r/n/t"),_tcslen(_T("/r/n")) * sizeof(TCHAR)); flOutputFile.Write(strHeader.c_str(),strHeader.length()); string a_s("#ifndef __MTK_IMG_RES_OUTPUT_H__/r/n#define __MTK_IMG_RES_OUTPUT_H__/r/n/r/n/r/n/r/n/r/n/r/n"); flheader.Write(a_s.c_str(),a_s.length()); } ULONGLONG file_len = file__.GetLength(); ULONGLONG total_readed = 0; BYTE buf_[16] = {0}; for(ULONGLONG j = 0 ; total_readed < file_len ;) { if(j == 0) { string sC ("__align(4) const unsigned char "); string a_s("extern const unsigned char "); string as_s(m_strImgFiles[i]); sC += Replace_FileName_with_(as_s);//MyGetFileNameA(m_strImgFiles[i].c_str()); a_s += as_s;//Replace_FileName_with_(); sC += "[] = /r/n{/r/n/t"; a_s += "[];/r/n/r/n"; flheader.Write(a_s.c_str(),a_s.length()); if(m_strImgFiles[i].find(".GIF") != TSNOTFIND) { char _t_h_buf[200] = "0x03, 0x00, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x00, 0x00,/r/n/t"; char _t_h_buf1[200] = {0}; int filelen = (int)file_len; BYTE myByteBuf[4] = {0}; myByteBuf[0] = file_len & 0xff; myByteBuf[1] = (file_len >> 8) & 0xff; myByteBuf[2] = (file_len >> 16) & 0xff; myByteBuf[3] = (file_len >> 24) & 0xff; sprintf(_t_h_buf1,_t_h_buf,myByteBuf[0],myByteBuf[1],myByteBuf[2],myByteBuf[3]); sC += _t_h_buf1; } else { char _t_h_buf[200] = "0x01, 0x00, 0x%02X, 0x%02X, 0x%02X, 0x%02X,/r/n/t"; char _t_h_buf1[200] = {0}; int filelen = (int)file_len; BYTE myByteBuf[4] = {0}; myByteBuf[0] = file_len & 0xff; myByteBuf[1] = (file_len >> 8) & 0xff; myByteBuf[2] = (file_len >> 16) & 0xff; myByteBuf[3] = (file_len >> 24) & 0xff; sprintf(_t_h_buf1,_t_h_buf,myByteBuf[0],myByteBuf[1],myByteBuf[2],myByteBuf[3]); sC += _t_h_buf1; } flOutputFile.Write(sC.c_str(),sC.length()); pDlg->m_pcCurrentProgress.SetRange32(0,(int)file_len); } else { string sC("/t"); flOutputFile.Write(sC.c_str(),sC.length()); } j = file__.Read(buf_,sizeof(buf_)); total_readed += j; string sContent; for(ULONGLONG z = 0; z < j ; ++z) { char __t_buf[20] = {0}; sprintf(__t_buf,"0x%02X,",buf_[z]); sContent += __t_buf; } if(total_readed >= file_len) { if(sContent[sContent.length() - 1] == ',') sContent[sContent.length() - 1] = '/t'; } sContent += "/r/n"; flOutputFile.Write(sContent.c_str(),sContent.length() ); pDlg->m_pcCurrentProgress.SetPos((int)total_readed); } file__.Close(); flOutputFile.Write("};/r/n",strlen("};/r/n") ); pDlg->m_cpTotalProgress.SetPos(i); } }/*end if( size) */ if((HANDLE)flOutputFile != INVALID_HANDLE_VALUE) flOutputFile.Close(); if((HANDLE)flheader != INVALID_HANDLE_VALUE) { string a_s("/r/n/r/n/r/n/r/n#endif/*__MTK_IMG_RES_OUTPUT_H__*//r/n/r/n"); flheader.Write(a_s.c_str(),a_s.length()); flheader.Close(); } if ((HANDLE)flGifFile != INVALID_HANDLE_VALUE) { flGifFile.Close(); } } CWnd* pWnd = pDlg->GetDlgItem(IDC_BUTTON1); pWnd->EnableWindow(TRUE); pWnd = pDlg->GetDlgItem(IDC_BUTTON2); pWnd->EnableWindow(TRUE); //pWnd = GetDlgItem(IDC_EDIT1); //pWnd->EnableWindow(TRUE); pDlg->m_edtPath.EnableWindow(TRUE); pDlg->m_cpTotalProgress.SetPos(size > 1 ? size - 1 : 1); pDlg->MessageBox(_T("处理完毕,如转化完成是unicode编码,则使用ue来打开txt文件。"),_T("MTK资源编辑完成")); pDlg->m_cpTotalProgress.SetPos(0); pDlg->m_pcCurrentProgress.SetPos(0); #endif return 0; } BEGIN_MESSAGE_MAP(CPicMakingThread, CWinThread) END_MESSAGE_MAP() // CPicMakingThread 消息处理程序