前几周做了个主题生成工具,在此简单复习下期间使用过的一些东西,包括MFC类库已经windows api。
1. 执行程序即shell调用
SHELLEXECUTEINFO si;
si的主要配置是lpFile和lpParameters,也就是exe -p这段命令中的执行文件和参数两部分
ShellExcuteEx(&si);
2. CString
功能强大,比stl的string感觉用起来简单强大多了,最主要就是连接字符串的时候感觉简单,还有就是格式化特定字符串,可以用format,然后就是以前printf那一套。使用stl_string,需要使用stringstream,然后使用类似cout那种
其他,还有多种截取子串的功能,字符串毕竟功能(比如忽略大小写,stl中的需要对字符串进行一个转换,这个转换还让我使用了函数对象,oo)
3. 浏览文件夹
就是选择一个文件夹那个功能,使用filedialog不行,需要使用
BROWSEINFO bi;
LPITEMIDLIST pList = ::SHBrowseForFolder(&bi);
char path[];
SHGetPathFormIDList(pList, path);
注意需要手动free item
CComPtr<IMalloc> piMalloc;
::SHGetMalloc(&piMalloc);
piMalloc->free(pList)
4. 存文件对话框
这个的关键在于需要在对话框被释放以后仍旧去取得对话框选择的路径。怎么办呢?就是预先开辟一块空间,将选择的值写进那里。
CFileDialog d(FALSE);
CString cStr;
d.GetOFN().lpstrFile = cStr.getBuffer(1025);
d.GetOFN().nMaxFile = 1024;// 字符串的长度,不是文件的个数
Note:需要手动释放cstring出来的buffer
cStr.ReleaseBuffer();// 虽然release了,但是里面的内容已经放进cStr中,感觉还是有些奇怪的
PS. 为啥读文件对话框就可以直接getPath捏。。。
5. 配置文件
曾经自己还在那头傻乎乎的做读写文件,保存配置,匹配字符串之类的一切。结果发现简单的两句API函数就可以搞掂。。。无奈,自己做轮子确实不像话,不过我应该要知道轮子是怎么做的。话说,字符串匹配我还没有做出来,杯具。
WritePrivateProfileString
GetPrivateProfileString
6. 最简单的多线程
在UI操作中,多线程还是重要的,毕竟主线程阻塞了,界面停滞就丑死了。
AfxBeginThread(func, pUser); 一句话
哦,忘了加func函数了
UINT func(LPVOID pUser)
{
....
}
pUser的话呢,想要什么数据就传什么过去吧
7 文件操作
这个很基础,不过既然写得兴起,就一并写上吧
CFile, CFileFind不过好像没什么可说的,不过CFileFind 支持通配符查找,isDot(),可以直接判断是否是.和..两个文件。还是isDirectory判断文件夹。
好了,最后一条直接让我写得没兴趣了,也没什么可以写了。就Over吧