如何实现提取并保存图标资源覆盖

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 );

}

}

}

高血压的治疗与饮食方法有哪些
孩子吃饭没胃口怎么办
广州医院白癜风哪家医院好
为你推荐