C ++。图标覆盖所有空文件夹。 (壳牌图标叠加)

时间:2011-04-15 22:20:54

标签: c++ windows shell windows-shell

我对c ++并不熟悉,但我需要使用它,因为.net \ java + Shell存在一些问题。

所以我举例说明如何在包含一些文本的文件上添加图标:http://www.codeproject.com/KB/shell/overlayicon.aspx

我需要用我的图标标记所有空文件夹。我怎么能这样做?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您需要创建一个实现IShellIconOverlayIdentifier的COM对象,就像该代码项目文章一样。

你的IsMemberOf方法看起来像这样:

STDMETHODIMP YourClassThatImplementsIShellIconOverlayIdentifier::IsMemberOf(PCWSTR pwszPath,DWORD Attr)
{
    if (!(Attr&FILE_ATTRIBUTE_DIRECTORY)) return S_FALSE; // Not a folder

    UINT count = 0;
    WIN32_FIND_DATAW wfd;
    LPWSTR bufSpec = (LPWSTR) LocalAlloc(LPTR,(lstrlenW(pwszPath)+2+1)*sizeof(WCHAR));
    if (bufSpec)
    {
        lstrcpyW(bufSpec,pwszPath);
        PathAddBackslashW(bufSpec);
        lstrcatW(bufSpec,L"*");
        HANDLE hFind = FindFirstFileW(bufSpec,&wfd);
        if (INVALID_HANDLE_VALUE!=hFind) do
        {
            ++count;
        } while( count<= 2 && FindNextFileW(hFind,&wfd) );
        FindClose(hFind);
        LocalFree(bufSpec);
    }

    return count==2 ? S_OK : S_FALSE;
}

(空文件夹包含两个特殊条目,“。”和“..”)