CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

从文件中取出的图标,如何能将它显示在TListView中(TListView中的条目数量很多!)

楼主bfq(bfq)2000-09-13 02:13:00 在 C++ Builder / 基础类 提问

由于需要在TListView中显示带图标的内容,而TListView中的内容又不固定,因此想动态的中文件中取出图标然后显示到TListView上,请高手指点方法! 问题点数:50、回复次数:13Top

1 楼SCUM(人渣)回复于 2000-09-13 09:46:00 得分 5

借助   TImageList   的属性和方法,动态装入图标。  
  注意对   TVItem   的识别和调整,比较烦人。  
  不过我很喜欢这样做,看起来多美啊。Top

2 楼early(走)回复于 2000-09-13 09:49:00 得分 5

你好:  
  你可以用ExtractIcon这个API函数取到HICON句柄  
   
  Top

3 楼bfq(bfq)回复于 2000-09-13 12:28:00 得分 0

用ExtractIcon取到HICON后,如何放到TImageList中,我试了几次,总是出错,请指点!!能给出代码例子最好。Top

4 楼Putao(掌门大师兄)回复于 2000-09-13 13:02:00 得分 0

关注Top

5 楼early(走)回复于 2000-09-13 13:03:00 得分 0

写过的代码丢在爪哇国了  
  请把你的代码帖出来,让大家帮你看看Top

6 楼gx_sunny()回复于 2000-09-13 21:19:00 得分 5

我问了同样的问题,在CB中有例程,在Examples\VirtualListView下!很完整!去看看!Top

7 楼lumine(源点)回复于 2000-09-14 17:04:00 得分 0

  关注!Top

8 楼lumine(源点)回复于 2000-09-14 17:09:00 得分 0

TO:gx_sunny  
  怎么下载你的例程?Top

9 楼bfq(bfq)回复于 2000-09-15 02:37:00 得分 0

谢谢各位,问题已解决,代码如下  
  AnsiString   Fname;//文件名  
  int   i;//图标索引  
  HIcon=new   TIcon();  
  HIcon->Handle=ExtractIcon(HInstance,Fname.c_str(),i);  
  ImageList1->AddIcon(HIcon));  
  但问题是取出的图标在ListView中比较难看,而且又不能以大图标方式显示,有人能帮我想想办法吗?Top

10 楼CPerlAsm_Lx(一叶知秋)回复于 2001-09-06 11:57:46 得分 0

upTop

11 楼xiaozi(魅力燃烧)回复于 2001-09-06 21:32:52 得分 35

 
  void   __fastcall   TForm1::FDrawIcon(   AnsiString   sFileName   )  
  {  
          ListView1->Items->Clear();       //清空原来的图标  
          ImageList1->Clear();  
   
          TListItem   *listitem;  
          HICON   hIcon;  
          TIcon   *Icon=new   TIcon();  
          //文件中包含的图标总数  
          int   iCount   =   (int)ExtractIcon(   Handle,sFileName.c_str(),   -1);      
          //循环提取所有图标  
          for   (   int   i=0;   i<iCount;   i++)  
          {  
                  hIcon   =   ExtractIcon(   Handle,sFileName.c_str(),   i);  
                  Icon->Handle   =   hIcon;  
                  ImageList1->AddIcon(   Icon   );  
                  listitem   =   ListView1->Items->Add();  
                  listitem->ImageIndex   =   ImageList->Count   +   i;  
                   
                  listitem->Caption   =   "Icon   "   +   AnsiString(   listitem->ImageIndex   );  
                   
          }  
          delete   Icon;  
   
  }  
  Top

12 楼CPerlAsm_Lx(一叶知秋)回复于 2001-09-09 12:06:56 得分 0

en   Top

13 楼xiaozi(魅力燃烧)回复于 2001-10-24 15:06:22 得分 0

 
  楼上的说得都很有道理,但这样做的话速度太慢了。  
   
  要想达到像资源管理器的速度我建议你用   Windows   提供的   Image   List.  
   
  一个简单的例子.  
  //   AddIconsToImageList   -   creates   a   masked   image   list   and   adds   some    
  //           icons   to   it.    
  //   Returns   the   handle   to   the   new   image   list.    
  //   hinst   -   handle   to   the   application   instance.    
  //    
  //   Global   variables   and   constants    
  //           g_nBird   and   g_nTree   -   indexes   of   the   images.    
  //           cx_icon   and   cy_icon   -   width   and   height   of   the   icon.    
  //           num_icons   -   number   of   icons   to   add   to   the   image   list.    
  extern   int   g_nBird,   g_nTree;    
     
  #define   CX_ICON     32    
  #define   CY_ICON     32    
  #define   NUM_ICONS   3    
     
  HIMAGELIST   AddIconsToImageList(HINSTANCE   hinst)    
  {    
          HIMAGELIST   himlIcons;     //   handle   to   new   image   list    
          HICON   hicon;                       //   handle   to   icon    
     
          //   Ensure   that   the   common   control   DLL   is   loaded.    
          InitCommonControls();    
   
          //   Create   a   masked   image   list   large   enough   to   hold   the   icons.    
          himlIcons   =   ImageList_Create(CX_ICON,   CY_ICON,   ILC_MASK,   NUM_ICONS,   0);    
     
          //   Load   the   icon   resources,   and   add   the   icons   to   the   image   list.    
          hicon   =   LoadIcon(hinst,   MAKEINTRESOURCE(IDI_BIRD));    
          g_nBird   =   ImageList_AddIcon(himlIcons,   hicon);    
     
          hicon   =   LoadIcon(hinst,   MAKEINTRESOURCE(IDI_TREE));    
          g_nTree   =   ImageList_AddIcon(himlIcons,   hicon);    
     
          return   himlIcons;    
  }    
     
   
  在MSDN   中找   Image   list   会有更详细的用法!  
   
  Top

相关问题

  • 怎样在最新的新闻条目后面加上new的图标
  • 请问怎样可以快速的取出文件的图标
  • 我想在treeview里显示和windows里一样的图标,怎样动态取出图标用在treeview里呢?
  • 我想在listview里显示和windows里一样的图标,怎样动态取出图标用在listview里呢?!
  • 给定一个目录,如何提取出它对应的图标?
  • 有哪们高手能提供将STARCRAFT 的图标提取出来的程序?
  • 请问如何取出系统里文件的图标?好像都在dll里
  • 谁能自己编写代码把Window系统所用的图标取出来?
  • 如何把listbox中的条目的值取出来放在一个数组中啊
  • 如何在TListView的列中加入图标?

关键词

  • 文件
  • 代码
  • tlistview
  • 图标
  • icon
  • hicon
  • 取出
  • extracticon
  • imagelist
  • ticon

得分解答快速导航

  • 帖主:bfq
  • SCUM
  • early
  • gx_sunny
  • xiaozi

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo