用C++ Builder获取应用程序图标

 文/王斌



  我们经常在网上看到有关提取图标的共享软件或免费软件。喜欢编程的朋友们都在梦想自己能够动手做一个!使用可视化编程利器C++Builder可使你制作这样的软件变得非常轻松。

  建立工程文件

  
  首先启动C++Builder,新建一工程,在窗体上放置两个控件:“抽取”按钮SpeedButton1、“退出”按钮SpeedButton2。设一个ListView控件用来浏览抽取的图表信息、一个Image控件用来显示当前的图标信息和一个OpenDialog控件用来打开被选文件,它们的名称均不必改动。为了美观,读者还可以根据需要增加其它控件,做适当的润色。

  取得和显示图标

  双击SpeedButton控件,在Click事件中写如下代码:

   void_fastcall TForm1::SpeedButton1Click(TObject

  Sender)

  {

   TListItem*Lst;

   if(OpenDialog1->Execute())

  //打开被提取图标的文件

   {

   FileName=OpenDialog1->FileName;

   FileName=FileName.UpperCase();

   TempFile=FileName.SubString(1,FileName.AnsiPos("."))+"ICO";

  //产生和备选文件同名的Ico图标文件名

   HICON hIcon; //定义抽取的图标句柄

   int Total =(int) ExtractIcon( Form1->Handle, FileName.c_str(), -1);

   //抽取图标:-1表示抽取所有图标并且将获得的图标总数存入变量Total

   ListView1->Items->Clear();

   ImageList1->Clear();

   for(int i=0;i<Total;i++) {

   Icon = new TIcon();

   hIcon = ExtractIcon( Form1->Handle, FileName.c_str(),i);

   Icon->Handle=hIcon;

   ImageList1->AddIcon(Icon);

   Lst=ListView1->Items->Add();

   Lst->Caption="第"+IntToStr(i)+"号图标";

   Lst->ImageIndex=i;

   }

   if(Total>0)

   {

   Icon->SaveToFile(TempFile);

  //将最后一个图标存入文件

   Image1->Picture->LoadFromFile(TempFile); //将存入文件的图标显示

   }

   }

  }

  以下为退出按钮设置

   void_fastcall TForm1::SpeedButton2Click(TObjectSender)

  {

   Close();

  }

  在编辑文档的头文件中定义:AnsiString TempFile,FileName;TIcon*Icon;运行程序时,你所选定的程序的全部图标就在ListView控件中显示出来,最后一个图标在Image控件中显示出来,此时如果在ListView中单击图标,相应的信息也将在Image控件中显示。

  经过以上的操作,被选文件的图标信息就被显示出来了。下面,我们讨论如何存储被选定的图标。

  存储图标

  为了不影响整个界面的美观,我们在Form上建立一个快捷选单,并在“存储图标”的Click事件中书写如下代码:

  void_fastcall TForm1::N1Click(TObjectSender)

  {

AnsiString PutFile;

   if (InputQuery("提示信息", "存储文件名:", PutFile)) //弹出输入对话框

   {

   if (PutFile.Length()>0)

   {

   if(PutFile.AnsiPos(".")<=0)

   {

   PutFile=PutFile+".Ico" ;

   }

   if(ListView1->Selected!=NULL)

   {

   HICON hIcon;

   Icon = new TIcon();

  hIcon=ExtractIcon(Form1->Handle,FileName.c_str(),ListView1->Selected->Index);

   Icon->Handle=hIcon;

   Icon->SaveToFile(PutFile);

   Image1->Picture->LoadFromFile(PutFile);

   delete Icon;

   }

   }

   }

  }

 windows下的执行程序,大部分都是资源信息与应用代码单独存放的,从这些资源文件中抽取图标信息只是很小的一个实例。如果要获取更多的信息,就需要调用API函数SHGetFileInfo。有兴趣的朋友可以用本文类似的思路进行更深一步的探讨,我想,编写一个汉化软件并非难事。

http://tech.sina.com.cn/c/2001-12-06/7696.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值