擷取檔案表徵圖的方法:
1、通過檔案路徑,擷取關聯的表徵圖.並顯示在對話方塊上..
SHFILEINFO m_sfi;
memset(&m_sfi,0,sizeof(SHFILEINFO));
SHGetFileInfo( m_strPath ,0 ,&m_sfi,size(SHFILEINFO),SHGFI_ICON|SHGFI_LARGEICON);
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_STATIC);
HICON hIcon=m_sfi.hIcon;
pStatic->SetIcon(hIcon);
2、通過副檔名擷取關聯表徵圖,並顯示在對話方塊上
新增成員函數有用於通過尋找註冊表後,返回找到表徵圖控制代碼
HICON GetRegisterIcon(LPCSTR Ext)
{
HKEY Key;
long Size;
char *s, *t;
char buf[260];
HICON hIcon;
HICON hIconS;
if (!Ext || !Ext[0])
return NULL;
Key = HKEY_CLASSES_ROOT;
Size = sizeof(buf); buf[0] = '/0';
if (RegQueryValue(Key,Ext,buf,&Size)
!=ERROR_SUCCESS || buf[0]=='/0')
return NULL;
if (RegOpenKey(HKEY_CLASSES_ROOT,buf,
&Key) != ERROR_SUCCESS)
return NULL;
Size = sizeof(buf); buf[0] = '/0';
if (RegQueryValue(Key,"DefaultIcon",
buf,&Size)!=ERROR_SUCCESS) {
RegCloseKey(Key); return NULL;
}
else
RegCloseKey(Key);
if ((s=strrchr(buf,','))==NULL)
return NULL;
t = s-1; *s++ = '/0';
while(t>=buf && *t==' ') {
*t = '/0'; t--;
}
ExtractIconEx(buf, atoi(s),
&hIcon, &hIconS, 1);
return hIcon; //or return hIconS;
}
應用:
CStatic* pStatic = (CStatic*) GetDlgItem(IDC_STATIC);
HICON hIcon=GetRegisterIcon(".bmp");
pStatic->SetIcon(hIcon);