代码改变世界

win32 又一个经典爽歪歪的api,太强大了SHGetFileInfo

2011-10-29 23:27  捣乱小子  阅读(1059)  评论(2编辑  收藏  举报

今天突发奇想在将来学会(从事)桌面软件的设计,因为在windows下桌面的快捷便利性是很受到众多网友们的爱戴的,而且一款好的桌面软件能给常年工作于计算机的友友们带来不可忽略的效率,甚至可以赏心悦目,让大家都爱不释手的。如果软件很臃肿,除非很多的用户对其有特别的依赖性,不然它很快会被大众埋没。

不废话了,直接如题。

SHGetFileInfo是一个非常实用的api。

DWORD_PTR SHGetFileInfo(      
    LPCTSTR pszPath,     DWORD dwFileAttributes,     SHFILEINFO *psfi,     UINT cbFileInfo,     UINT uFlags );
参数一是文件的路径
不解释
三是结构名为SHFILEINFO的地址,这个其实window来维护的,我们不用填写。
四是SHFILEINFO的大小(简单)。
五很重要,具体要看msdn
ps:当获取icon的时候要注明是large还是small,当然默认的icon是大的,如果是笑的一定要注明啊,不能直接large和small,这个没有效果。
SFI_LARGEICON(SFI_SMALLICON)已经注明了是SFI_ICON的修饰值了,也就是说SFI_LARGEICON(SFI_SMALLICON)是不能单独出现的。
具体可以看一下在VC下实现的代码:
    \\mfc实现(太棒了)
SHFILEINFO fileinfo;
::ZeroMemory(&fileinfo,sizeof(fileinfo));
::SHGetFileInfo(TEXT(
"C:\\Documents and Settings\\Administrator\\桌面\\Dbgview.exe"),
0,&fileinfo,sizeof(fileinfo),SHGFI_ICON);
hIcon = fileinfo.hIcon;
CDC * dc = this->GetDC();
dc->DrawIcon(0,0,hIcon);