初步使用CFileDialog类,感觉似乎不如SDK好用,很多东西没有封装进去。
int main()
{
CFileDialog m_dlgFile(0, _T(".doc"), 0, OFN_EXPLORER,
_T("测试打开WORD文档 (*.doc)\0*.doc\0\0"));
TCHAR szFile[MAX_PATH];
GetModuleFileName(ModuleHelper::GetModuleInstance(), szFile, _countof(szFile));
m_dlgFile.m_ofn.lpstrInitialDir = szFile;
// m_dlgFile.m_ofn.Flags = OFN_EXPLORER; // ★
m_dlgFile.DoModal();
CString str(m_dlgFile.m_szFileName);
wcout.imbue(locale("CHS")); // 控制台输出汉字
wcout << (LPCTSTR)str << endl; // 强制转换,否则只能看到数字
system("PAUSE");
return 0;
}
{
CFileDialog m_dlgFile(0, _T(".doc"), 0, OFN_EXPLORER,
_T("测试打开WORD文档 (*.doc)\0*.doc\0\0"));
TCHAR szFile[MAX_PATH];
GetModuleFileName(ModuleHelper::GetModuleInstance(), szFile, _countof(szFile));
m_dlgFile.m_ofn.lpstrInitialDir = szFile;
// m_dlgFile.m_ofn.Flags = OFN_EXPLORER; // ★
m_dlgFile.DoModal();
CString str(m_dlgFile.m_szFileName);
wcout.imbue(locale("CHS")); // 控制台输出汉字
wcout << (LPCTSTR)str << endl; // 强制转换,否则只能看到数字
system("PAUSE");
return 0;
}
精确到毫秒级,使用Release版本,VC2003,优化模式。
测试结果说明:std::vector的效率还不错,在循环遍历时,如果千万次的级别,则要注意不要在循环里反复调用v.end(),而应该在循环外面还将v.end()保存。数据量少(100万以下)则无此必要。下面是测试代码,测试结果自己看吧,配置不同,则结果也不一样。
测试结果说明:std::vector的效率还不错,在循环遍历时,如果千万次的级别,则要注意不要在循环里反复调用v.end(),而应该在循环外面还将v.end()保存。数据量少(100万以下)则无此必要。下面是测试代码,测试结果自己看吧,配置不同,则结果也不一样。
有一List Control,为“时间+内容”格式,想对所有项在保存时按时间排序,而保存之前是无序插入。初步感觉可以用std::map+sort,一实践,才发现std::map在insert时,就自动排序了(降序),正好符合我的要求,省得用sort了。
今天在读取ini文件时,跟踪发现,字符串" 500"用StrToInt转换后得到的结果是零,而不是预期的500,_tstoi就没有这个问题。
郁闷,看来Str系列字符串操作函数与C库函数的并不能等同。之前发现StrChr无法查找'\0',如今又发现StrToInt无法兼容_tstoi。
看来,想抛弃C库函数还是比较困难的。
例子:
郁闷,看来Str系列字符串操作函数与C库函数的并不能等同。之前发现StrChr无法查找'\0',如今又发现StrToInt无法兼容_tstoi。
看来,想抛弃C库函数还是比较困难的。
例子:
Sound=2000, 500
CString str(Sound); // 伪码
/* 失败
Beep(StrToInt(str.Left(str.Find(','))), StrToInt(str.Right(str.Find(','))));
*/
Beep(_tstoi(str.Left(str.Find(','))), _tstoi(str.Right(str.Find(','))));
CString str(Sound); // 伪码
/* 失败
Beep(StrToInt(str.Left(str.Find(','))), StrToInt(str.Right(str.Find(','))));
*/
Beep(_tstoi(str.Left(str.Find(','))), _tstoi(str.Right(str.Find(','))));
在使用Shlwapi.h中的系列函数时,需要:
不过,需要注意的是,有些字符串操作函数存在安全隐患,比如StrCpy,需要使用替代函数StringCchCopy,也可以自己写字符串拷贝函数,比如:
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "Shlwapi.lib")
不过,需要注意的是,有些字符串操作函数存在安全隐患,比如StrCpy,需要使用替代函数StringCchCopy,也可以自己写字符串拷贝函数,比如:
VOID StrCopy(PTSTR pszDest, int nMaxCount, PCTSTR pszSrc)
{
while (nMaxCount && (*pszSrc != '\0'))
{
*pszDest++ = *pszSrc++;
nMaxCount--;
}
if (nMaxCount == 0)
{
pszDest--;
}
*pszDest = '\0';
}
{
while (nMaxCount && (*pszSrc != '\0'))
{
*pszDest++ = *pszSrc++;
nMaxCount--;
}
if (nMaxCount == 0)
{
pszDest--;
}
*pszDest = '\0';
}





2007/10/03

