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 hIcon
FileInfo
ist immer NULL
, und ich weiß nicht warum.
Kann mir jemand sagen, wie ich das Problem beheben kann?
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
Vielleicht sollten Sie dies als Antwort auf Ihre eigene Frage hinzufügen. – tronda