アルゴリズムテストプラットフォーム構築共通コードバックアップ
9935 ワード
最近windowsプラットフォームの下で1つの簡単なアルゴリズムのテストプラットフォームを構築してアルゴリズムのテストを行います(またwindowsの下のアルゴリズムの開発をします~)
そこで、よく使われるMFCコードのコードを以下にまとめます.パス選択ダイアログ MFCにおける各種符号化フォーマットの変換 指定フォルダの下のすべての指定フォーマットのファイルを取得ここでboostを使って、サーバーの开発をしてboostを使ってから、离れられなくて、どんな机能も直接boostを使いたいと思って、やはり毒があります!!
4.
そこで、よく使われるMFCコードのコードを以下にまとめます.
void CMuraDetectDlg::OnMenuChoosePath()
{
// TODO:
wchar_t szPath[MAX_PATH] = {0};
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.lpszTitle = _T(" :");
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
bi.pszDisplayName = szPath;
//
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if (lp && SHGetPathFromIDList(lp, szPath))
{
CString str;
str.Format(_T(" %s"), szPath);
AfxMessageBox(str);
}
else
{
AfxMessageBox(_T(" , "));
}
m_file_path = m_util.UnicodeToANSI(szPath);
}
// ANSI to Unicode
wstring CUtil::ANSIToUnicode(const string& str)
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, NULL, 0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, (LPWSTR)pUnicode, unicodeLen);
wstring rt;
rt = (wchar_t*)pUnicode;
delete pUnicode;
return rt;
}
//Unicode to ANSI
string CUtil::UnicodeToANSI(const wstring& str)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_ACP,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)* (iTextLen + 1));
::WideCharToMultiByte(CP_ACP,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;
}
// UTF - 8 to Unicode
wstring CUtil::UTF8ToUnicode(const string& str)
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar(CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0);
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen + 1];
memset(pUnicode, 0, (unicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_UTF8,
0,
str.c_str(),
-1,
(LPWSTR)pUnicode,
unicodeLen);
wstring rt;
rt = (wchar_t*)pUnicode;
delete pUnicode;
return rt;
}
// Unicode to UTF - 8
string CUtil::UnicodeToUTF8(const wstring& str)
{
char* pElementText;
int iTextLen;
// wide char to multi char
iTextLen = WideCharToMultiByte(CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0,
NULL,
NULL);
pElementText = new char[iTextLen + 1];
memset((void*)pElementText, 0, sizeof(char)* (iTextLen + 1));
::WideCharToMultiByte(CP_UTF8,
0,
str.c_str(),
-1,
pElementText,
iTextLen,
NULL,
NULL);
string strText;
strText = pElementText;
delete[] pElementText;
return strText;
}
int CUtil::get_path_allfiles(const std::string& dir, const std::string fmt, bool mult_layer, std::vector<std::string>& filenames)
{
filesystem::path path(dir);
if (!filesystem::exists(path))
{
return -1;
}
filesystem::directory_iterator end_iter;
for (filesystem::directory_iterator iter(path); iter != end_iter; ++iter)
{
if (filesystem::is_regular_file(iter->status()))
{
string tmp_name = iter->path().string();
if (tmp_name.size() < 4)
{
continue;
}
tmp_name = tmp_name.substr(tmp_name.size() - 4, 4);
if (tmp_name.compare(fmt) == 0)
{
filenames.push_back(iter->path().string());
}
}
if (filesystem::is_directory(iter->status()))
{
if (mult_layer)
{
get_path_allfiles(iter->path().string(), fmt, mult_layer, filenames);
}
}
}
return (int)filenames.size();
}
4.