WEB开发网
开发学院软件开发VC 如何提取并保存图标资源 阅读

如何提取并保存图标资源

 2006-07-23 11:30:38 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 当你想要使用别的应用程序中的漂亮图标时,该怎么办呢?也许就会用到一些图标提取工具吧!那么,如何提取并保存图标资源,你知道它们是怎么实现的,想不想自己动手也做一个适合自己的图标提取工具呢?下面,代码实现如下://读取各种资源内部图标并显示在左侧列表框中void CIconSnapDlg:

本文示例源代码或素材下载

当你想要使用别的应用程序中的漂亮图标时,该怎么办呢?也许就会用到一些图标提取工具吧!那么,你知道它们是怎么实现的,想不想自己动手也做一个适合自己的图标提取工具呢?下面,就让我用我以前做过的一个工具<轻轻松松抓图标>来告诉你吧!它可以提取各种文件中的图标资源,并可将其保存为图标(ICO)、位图(BMP)两种格式。程序运行后界面如下:

图一

在上面的例程中,我整合出一个图标类CIcons和与之相配的一个位图类CDib,其中包括Icons.h、Icons.cpp、Dib.h和Dib.cpp四个文件。在你的工程中直接加入这四个文件后,调用其类涵数,既可做出你自己的图标工具来。

下面让我们来看看如何来具体用它们来实现:

1、 提取并显示出图标到左侧列表框中。

代码实现如下:

//读取各种资源内部图标并显示在左侧列表框中

void CIconSnapDlg::OnOK()
{
CFileDialog fileDialog( TRUE,"*.ICO",NULL,NULL,"资源文件(*.ICO,*.BMP,*.EXE,*.DLL,*.ICL)|*.ICO;*.BMP;*.EXE;*.DLL;*.ICL||");
if (fileDialog.DoModal() == IDOK)
{
szOpenFileName=fileDialog.GetPathName();
     szOpenFileExtName= fileDialog.GetFileExt ();
szOpenFileExtName.MakeLower ();
m_List.ResetContent (); //选清空左侧图标列表框
//读取并显示ICON文件
     if(szOpenFileExtName =="ico")
{
lpIR=pIcons->ReadIconFromICOFile (szOpenFileName);
HICON hIcon;
hIcon=ExtractIcon(AfxGetInstanceHandle(),szOpenFileName,0);
       if(hIcon!=NULL)
m_List.AddString (szOpenFileName);
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS);
     pStatic->SetIcon (hIcon);
}
else if(szOpenFileExtName == "bmp") //读取并显示BMP文件
{
       pIcons->IconImageFromBMPFile (szOpenFileName,&lpIR->IconImages[0],TRUE);
HICON hIcon;
hIcon=pIcons->MakeIconFromResource (&lpIR->IconImages [0]);
if(hIcon!=NULL)
m_List.AddString (szOpenFileName);
       CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS);
     pStatic->SetIcon (hIcon);
}
     else //读取并显示EXE、DLL等资源文件
{
  HINSTANCE hLibrary;
  // Load the DLL/EXE - NOTE: must be a 32bit EXE/DLL for this to work
  if( (hLibrary = LoadLibraryEx( szOpenFileName, NULL, LOAD_LIBRARY_AS_DATAFILE )) == NULL )
  {
// Failed to load - abort
MessageBox( szOpenFileName+ "文件载入错误,必须是WIN32的文件!", "错误", MB_OK );
return;
  }
   // Store the info
  EDII.szFileName =szOpenFileName;
  EDII.hInstance = hLibrary;
  
  // Fill in the listbox with the icons available
  if( ! EnumResourceNames( EDII.hInstance, RT_GROUP_ICON, (ENUMRESNAMEPROC )MyEnumProcedure, (LPARAM)GetSafeHwnd()) )
  {
MessageBox( "列举图标资源名时出错!", "错误", MB_OK );
return;
  }
}
m_List.SetCurSel (0);
if( m_List.GetCount() == 0 )
{
MessageBox( "此文件中没有图标资源!", "错误", MB_OK );
//无图标资源,置保存和复制按钮为无效状态
m_Copy.EnableWindow (false);
m_SaveAs.EnableWindow (false);
return;
}
     //有图标资源,置保存和复制按钮为有效状态
m_Copy.EnableWindow (true);
m_SaveAs.EnableWindow (true);
//刷新调用OnPaint来显示图标
InvalidateRect(NULL,TRUE);
}
}

1 2  下一页

Tags:如何 提取 保存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接