2009-07-07 8 views
3

Das ist, was ich tat:Wie bekomme ich ein offenes Icon mit der SHGetFileInfo() Methode?

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

Hier ist das Problem: Ich fand, dass ich das Symbol eines Ordners einfach mit diesem Ansatz zu bekommen. Aber ich konnte sein offenes Icon nicht bekommen, wenn ich den vierten Parameter von SHGetFileInfo auf SHGFI_PIDL | SHGFI_OPENICON setze. Die hIconFileInfo ist immer NULL, und ich weiß nicht warum.

Kann mir jemand sagen, wie ich das Problem beheben kann?

+2

Ich habe das Problem gelöst. Ändern Sie den vierten Parameter von SHGFI_PIDL | SHGFI_OPENICON zu SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON, dann konnte ich das geöffnete Symbol des angegebenen Ordners abrufen. – quantity

+4

Vielleicht sollten Sie dies als Antwort auf Ihre eigene Frage hinzufügen. – tronda

Antwort

0

Von den Kommentaren:

Ich habe das Problem gelöst. Ändern Sie den vierten Parameter von SHGFI_PIDL | SHGFI_OPENICON zu SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_OPENICON, dann konnte ich das geöffnete Symbol des angegebenen Ordners abrufen.