-
c语言入门之用C++ Builder获取应用程序图标
文/王斌
我们经常在网上看到有关提取图标的共享软件或免费软件。喜欢编程的朋友们都在梦想自己能够动手做一个!使用可视化编程利器C++Builder可使你制作这样的软件变得非常轻松。
建立工程文件
首先启动C++Builder,新建一工程,在窗体上放置两个控件:“抽取”按钮SpeedButton1、“退出”按钮SpeedButton2。设一个ListView控件用来浏览抽取的图表信息、一个Image控件用来显示当前的图标信息和一个OpenDialog控件用来打开被选文件,它们的名称均不必改动。为了美观,读者还可以根据需要增加其它控件,做适当的润色。
取得和显示图标
双击SpeedButton控件,在Click事件中写如下代码:
void_fastcall TForm1::SpeedButton1Click(TObject
Sender)
{
TListItemLst;
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 {
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(TObjectSender)
{
Close();
}
在编辑文档的头文件中定义:AnsiString TempFile,FileName;TiconIcon;运行程序时,你所选定的程序的全部图标就在ListView控件中显示出来,最后一个图标在Image控件中显示出来,此时如果在ListView中单击图标,相应的信息也将在Image控件中显示。
经过以上的操作,被选文件的图标信息就被显示出来了。下面,我们讨论如何存储被选定的图标。
存储图标
为了不影响整个界面的美观,我们在Form上建立一个快捷选单,并在“存储图标”的Click事件中书写如下代码:
void_fastcall TForm1::N1Click(TObjectSender)
{
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。有兴趣的朋友可以用本文类似的思路进行更深一步的探讨,我想,编写一个汉化软件并非难事。
我们经常在网上看到有关提取图标的共享软件或免费软件。喜欢编程的朋友们都在梦想自己能够动手做一个!使用可视化编程利器C++Builder可使你制作这样的软件变得非常轻松。
建立工程文件
首先启动C++Builder,新建一工程,在窗体上放置两个控件:“抽取”按钮SpeedButton1、“退出”按钮SpeedButton2。设一个ListView控件用来浏览抽取的图表信息、一个Image控件用来显示当前的图标信息和一个OpenDialog控件用来打开被选文件,它们的名称均不必改动。为了美观,读者还可以根据需要增加其它控件,做适当的润色。
取得和显示图标
双击SpeedButton控件,在Click事件中写如下代码:
void_fastcall TForm1::SpeedButton1Click(TObject
Sender)
{
TListItemLst;
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 {
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(TObjectSender)
{
Close();
}
在编辑文档的头文件中定义:AnsiString TempFile,FileName;TiconIcon;运行程序时,你所选定的程序的全部图标就在ListView控件中显示出来,最后一个图标在Image控件中显示出来,此时如果在ListView中单击图标,相应的信息也将在Image控件中显示。
经过以上的操作,被选文件的图标信息就被显示出来了。下面,我们讨论如何存储被选定的图标。
存储图标
为了不影响整个界面的美观,我们在Form上建立一个快捷选单,并在“存储图标”的Click事件中书写如下代码:
void_fastcall TForm1::N1Click(TObjectSender)
{
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。有兴趣的朋友可以用本文类似的思路进行更深一步的探讨,我想,编写一个汉化软件并非难事。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式