C ++. Значок наложения поверх всех пустых папок. (Наложение значка оболочки) - PullRequest
2 голосов
/ 16 апреля 2011

Я не очень знаком с c ++, но мне нужно его использовать, потому что есть некоторые проблемы с .net \ java + Shell.

Итак, у меня есть пример, как сделать значок над файлами, который содержит некоторый текст: http://www.codeproject.com/KB/shell/overlayicon.aspx

И мне нужно пометить своим значком все пустые папки. Как я могу это сделать?

Буду признателен за любую помощь.

1 Ответ

4 голосов
/ 16 апреля 2011

Вам необходимо создать COM-объект, который реализует IShellIconOverlayIdentifier, как эта статья codeproject.

Ваш метод 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;
}

(пустая папка содержит две специальные записи, "." и "..")

...