//================================================================================= BOOL CPrjGetFileIconTestApp::InitInstance() { //if you don't initilize the COM ,the SHGetFileInfo function can't get some file's icon,such as htm/html/xml. //如果你不初始化COM,SHGetFileInfo 函数就不能得到一些文件到图标,如:htm/html/xml. if (!AfxOleInit()) { AfxMessageBox("AfxOleInit Failed"); return FALSE; } .... .... .... } //================================================================================= void CPrjGetFileIconTestDlg::OnLButtonDblClk(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //------------------------------------------------------------------------------------------ CFileDialog fileDialog( TRUE,"*.*",NULL,NULL,NULL); CStatic* pStatic = (CStatic*) GetDlgItem(IDC_STATIC); HICON hIcon; //------------------------------------------------------------------------------------------ if (fileDialog.DoModal() != IDOK) return; hIcon = GetFileIcon(fileDialog.GetFileExt(),fileDialog.GetFileName()); pStatic->SetIcon (hIcon); //------------------------------------------------------------------------------------------ CDialog::OnLButtonDblClk(nFlags, point); } //================================================================================= //Get the icon's handle of file HICON CPrjGetFileIconTestDlg::GetFileIcon(CString strFileExtentName, CString strFileFullPathName) { HICON hIcon; if(0 != strFileExtentName.CompareNoCase("ico") && 0 != strFileExtentName.CompareNoCase("exe") && 0 != strFileExtentName.CompareNoCase("scr")) { //Get the icon of the common files - 普通文件图标 strFileExtentName = "." + strFileExtentName; SHFILEINFO sfi; SHGetFileInfo(strFileExtentName,0,&sfi,sizeof(sfi),SHGFI_ICON|SHGFI_LARGEICON|SHGFI_USEFILEATTRIBUTES); int i=sfi.iIcon; hIcon=sfi.hIcon; } else { //Get the icon of the Exe file Ico file or scr file - Exe,Ico,Scr 图标 hIcon=::ExtractIcon(AfxGetInstanceHandle(),_T(strFileFullPathName),0); } return hIcon; }