试试这个ExtractAssociatedIcon。(可能更慢哦)其实不需要一次性全部读出,那样即使有快速的函数也不行的---想想打开System
目录下几千个文件的情况.可以先读出一个n个文件的图标,(n=ListCtrl一页显示的内容),在scroll时,到那页显示那页的。
目录下几千个文件的情况.可以先读出一个n个文件的图标,(n=ListCtrl一页显示的内容),在scroll时,到那页显示那页的。
解决方案 »
- domodal出来的对话框中的析构函数什么时候执行
- 关于select函数的疑问,为什么要这样用?
- VS2005里 Event Handler 处理函数删除的问题
- 如何在一个EDIT上动态显示另一个EDIT的内容
- 打印机选纸时,各种纸型的具体尺寸是多少啊?
- 怎么用MFC的EDIT控件实现VT100的显示??
- 有没有高手做过类似Transport,FlashGet的软件啊?
- 不用mfc怎么访问sql server--在线
- C的困惑,请大家过来看看,我在现等待
- 学vc很困难,有人叫我先学c++,一看书《c++编程思想》就发现不懂
- 消息控制,无模式对话框的问题
- 麻烦介绍几个国外的类似与csdn这样提问/借大的网站????
CDC *pDC=this->GetDC();
HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T
("NotePad.exe"),0); if (hIcon &&hIcon!=(HICON)-1)
pDC->DrawIcon(10,10,hIcon);
你有没有使用 SHGFI_SYSICONINDEX 标志,直接使用缓冲的SystemImage应该是很快的。
SHFILEINFO sfi;
hImg = (HIMAGELIST)SHGetFileInfo(文件名 , 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX|SHGFI_SMALLICON);//大图标用SHGFI_LARGEICON此时返回的值是HIMAGELIST类型的系统图标图象列表,sfi.iIcon为获得的图标在该列表中的Index。
使用: ImageList_Draw(hImg, sfi.iIcon, pDC, x, y, ILD_TRANSPARENT);//在DC上画出其他函数见MSDN索引 ImageList_*。 如果你调用ImageList_SetBkColor改变此图象列表的背景色,你会发现在浏览器的ShellTree的图标背景色被改变了。
而且使用 ILD_BLEND标志可画出高亮态,ImageList_BeginDrag,ImageList_DragMove等可画出图标被拖动时的效果。可见系统本身就是使用了该列表.
另外,还想请教
在ListCtrl中怎么用系统图象列表?
用什么办法把ListCtrl的图像列表设为系统图象列表?
能不能获得系统图象列表的句柄,然后随心所欲的把它当成自已的图象列表来用?