如何实现提取并保存图标资源覆盖
2021-08-24 合山装修公司
当你想要使用别的应用程序中的漂亮图标时,该怎么办呢?也许就会用到一些图标提取工具吧!那么,你知道它们是怎么实现的,想不想自己动手也做一个适合自己的图标提取工具呢?下面,就让我用我以前做过的一个工具<轻轻松松抓图标>来告诉你吧!它可以提取各种文件中的图标资源,并可将其保存为图标(ICO)、位图(BMP)两种格式。程序运行后界面如下:
图一
在上面的例程中,我整合出一个图标类CIcons和与之相配的一个位图类CDib,其中包括Icons.h、p、Dib.h和p四个文件。在你的工程中直接加入这四个文件后,调用其类涵数,既可做出你自己的图标工具来。
[下一页]
下面让我们来看看如何来具体用它们来实现:
1、 提取并显示出图标到左侧列表框中。
代码实现如下:
void CIconSnapDlg::OnOK()
{
CFileDialog fileDialog( TRUE,\"*.ICO\",NULL,NULL,\"资源文件(*.ICO,*.BMP,*.EXE,*.DLL,*.ICL)|*.ICO;*.BMP;*.EXE;*.DLL;*.ICL||\");
if (Modal() == IDOK)
{
szOpenFileName=tPathName();
szOpenFileExtName= tFileExt ();
keLower ();
m_setContent ();
if(szOpenFileExtName ==\"ico\")
{
lpIR=pIcons-ReadIconFromICOFile (szOpenFileName);
HICON hIcon;
hIcon=ExtractIcon(AfxGetInstanceHandle(),szOpenFileName,0);
if(hIcon!=NULL)
m_dString (szOpenFileName);
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS);
pStatic-SetIcon (hIcon);
}
else if(szOpenFileExtName == \"bmp\")
{
pIcons-IconImageFromBMPFile (szOpenFileName,lpIR-IconImages[0],TRUE);
HICON hIcon;
hIcon=pIcons-MakeIconFromResource (lpIR-IconImages [0]);
if(hIcon!=NULL)
m_dString (szOpenFileName);
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS);
pStatic-SetIcon (hIcon);
}
else
{
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
吸腿裤再持续风靡几年后 FileName =szOpenFileName;
nstance = hLibrary;
// Fill in the listbox with the icons available
if( ! EnumResourceNames( nstance, RT_GROUP_ICON, (ENUMRESNAMEPROC )MyEnumProcedure, (LPARAM)GetSafeHwnd()) )
{
MessageBox( \"列举图标资源名时出错!\", \"错误\", MB_OK );
return;
}
}
m_tCurSel (0);
if( m_tCount() == 0 )
{
MessageBox( \"此文件中没有图标资源!\", \"错误\", MB_OK );
m_ableWindow (false);
m_ableWindow (false);
return;
}
m_ableWindow (true);
m_ableWindow (true);
InvalidateRect(NULL,TRUE);
}
}
在OnPaint()涵数中加入下面代码用来具体显示提取出的图标或位图资源。
LPTSTR lpIconID;
HICON hIcon;
if((lpIconID=(LPTSTR)m_tItemData(m_tCurSel()))!=(LPTSTR)LB_ERR )
{
if(szOpenFileExtName==\"exe\"||szOpenFileExtName==\"dll\"||szOpenFileExtName==\"icl\")
{
hIcon=pIcons-GetIconFromInstance(nstance,lpIconID);
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_ICONS);
pStatic-SetIcon (hIcon);
}
}
[下一页]
2、 如何将提取出的图标资源保存为Ico或Bmp格式。
void CIconSnapDlg::OnButtonSaveas()
{
LPTSTR lpIconID;
CFileDialog fileDialog( FALSE,\"*.ICO\",NULL,NULL,\"图标文件(*.ICO)|*.ICO|位图文件(*.BMP)|*.BMP||\");
if (Modal() == IDOK)
{
szSaveFileName=tPathName();
szSaveFileExtName= tFileExt ();
keLower ();
if(szOpenFileExtName==\"exe\"||szOpenFileExtName==\"dll\"||szOpenFileExtName==\"icl\")
if((lpIconID=(LPTSTR)m_tItemData (m_tCurSel()))!= (LPTSTR)LB_ERR)
lpIR=pIcons-ReadIconFromEXEFile (szOpenFileName,lpIconID);
if(szSaveFileExtName==\"bmp\")
{
if(lpIR!=NULL m_tCount ()0)
{
BeginWaitCursor();
pIcons-IconImageToBMPFile (szSaveFileName,lpIR-IconImages [0]);
EndWaitCursor();
}
else
MessageBox( \"没有可保存的图标资源!\", \"错误\", MB_OK );
}
else if(szSaveFileExtName==\"ico\")
{
if(lpIR!=NULL m_tCount ()0)
{
BeginWaitCursor();
pIcons-WriteIconToICOFile (lpIR,szSaveFileName);
EndWaitCursor();
}
else
MessageBox( \"没有可保存的图标资源!\", \"错误\", MB_OK );
}
}
}
高血压的治疗与饮食方法有哪些孩子吃饭没胃口怎么办
广州医院白癜风哪家医院好

-
-
逍遥CSR中国汽车短道拉力锦标赛南昌湾里站落
CSR中国汽车短道拉力锦标赛南昌湾里站落幕2018CSR中国汽车短道拉力锦标赛南...
- 装修施工 2020-09-27
-
逍遥CSR中国汽车短道拉力锦标赛南昌湾里站落
-
-
跳水大奖赛中国金银男子十米台小将包揽金银
跳水大奖赛中国金银 男子十米台小将包揽金银牌卡尔加里站精彩瞬间加拿大...
- 装修施工 2020-07-03
-
跳水大奖赛中国金银男子十米台小将包揽金银
-
-
海口棚改面前坡片区金龙新村签约工作因故暂搭配
海口棚改:面前坡片区金龙新村签约工作因故暂停南国都市报9月5日讯 (记者...
- 装修施工 2020-05-30
-
海口棚改面前坡片区金龙新村签约工作因故暂搭配
-
-
范多恩将告别F转投FE加盟HWA车队跻身搭配
范多恩将告别F转投FE 加盟HWA车队跻身梅奔范多恩斯托福-范多恩本赛季结束后...
- 装修施工 2020-05-26
-
范多恩将告别F转投FE加盟HWA车队跻身搭配
-
-
p肌理涂料优缺点肌理涂料施工工艺p
肌理涂料优缺点 肌理涂料施工工艺肌理涂料原名肌理漆,肌理是指物体表面的...
- 装修施工 2020-02-26
-
p肌理涂料优缺点肌理涂料施工工艺p
-
-
p木地板局部保养相关知识p
木地板局部保养相关知识木地板局部不慎沾染污迹应及时清除,若有油污,可...
- 装修施工 2020-02-26
-
p木地板局部保养相关知识p