2009-07-07 13 views
3

これは私がやったことです:SHGetFileInfo()メソッドでフォルダの開いているアイコンを取得する方法は?

LPMALLOC malloc; 
LPITEMIDLIST pidl; 
SHFILEINFO FileInfo; 
SFGAOF sfGao; 

if (SUCCEEDED(SHGetMalloc(&malloc)) 
{ 
    if (SUCCEEDED(SHParseDisplayName(strDirPath, NULL, &pidl, SFGAO_FOLDER, &sfGao))) 
    { 
     SHGetFileInfo((LPCWSTR)(PCHAR(pidl)), 0, &FileInfo, sizeof(FileInfo), SHGFI_PIDL | SHGFI_ICON); 
     CDC* pDC = GetWindowDC(); 
     pDC->DrawIcon(10, 10, FileInfo.hIcon); 
     ReleaseDC(pDC); 
    } 
    malloc->Free(pidl); 
} 
malloc->Release(); 

ここで問題です:私は、私は、このアプローチで簡単にフォルダのアイコンを取得することができることがわかりました。しかし、私がSHGetFileInfoメソッドの4番目のパラメータをSHGFI_PIDL | SHGFI_OPENICONに設定すると、その開いたアイコンを取得できませんでした。 hIconFileInfoの場合は、常にNULLになります。理由はわかりません。

問題を解決する方法を教えていただけますか?

+2

私はこの問題を解決しました。 4番目のパラメータをSHGFI_PIDL |から変更します。 SHGFI_OPENICONからSHGFI_PIDLへ| SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICONを実行すると、指定したフォルダの開いているアイコンを取得できました。 – quantity

+4

あなた自身の質問に対する答えとしてこれを追加するべきでしょうか? – tronda

答えて

0

コメントから:

私はこの問題を解決しました。 4番目のパラメータをSHGFI_PIDL | SHGFI_OPENICONからSHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICONに変更すると、指定したフォルダの開いているアイコンを取得できました。

関連する問題