1

私はC ++、特にMS C ++(Windows用)に非常に慣れていません

フォルダにオーバーレイアイコンを表示したい。

ネット上に例がほとんどないため、私はある程度成功しています。

オーバーレイ アイコンを表示する条件を作成できるように、ファイル/フォルダーの属性を取得して操作しようとしています。

ファイル/フォルダー (存在する場合) に関する情報をどのように取得できるかという DWORD の内容を理解するのに苦労していますIShellIconOverlayIdentifier::IsMemberOf 。方法について話しているのです。

    HRESULT IsMemberOf(
  [in]  PCWSTR pwszPath,
  DWORD dwAttrib
);

それがフォルダーなのか、書き込み可能かどうかを知るにはどうすればよいでしょうか... (dwAttrib から)。

それは言う(IsMemberOfドキュメントのdwAttr

オブジェクトの属性

DWORD には、ファイル/フォルダーのすべての属性が本当に含まれていますか?

メソッドから取得する必要がある場合IShellFolder::GetAttributesOf、どうすればそれを達成できますか。

私はJavaに傾倒しているので、このオーバーレイを行うだけでよいことを願っています。ありがとう

4

1 に答える 1

1

IShellIconOverlayIdentifier はシェル拡張によって実装され、通常、このインターフェイスを直接使用することはありません。シェルは、名前空間/IShellFolder 実装の奥深くでそれを呼び出します。

IShellFolder インターフェイスと子 pidl がある場合、次のように呼び出します。

SFGAOF icareabout = SFGAO_COMPRESSED|SFGAO_ENCRYPTED;
hr = pShellFolder->GetAttributesOf(1,&childpidl,&icareabout);
//Check hr
if (SFGAO_COMPRESSED&icareabout) ...

絶対 pidl しかない場合は、最初に SHBindToParent を呼び出します

通常のパスしかない場合は、SHParseDisplayNameを呼び出すと、フラグが表示されます (pidl を解放することを忘れないでください)。同じことは、SHGetFileInfoを SHGFI_ATTRIBUTES で呼び出すことによっても実現できます。

于 2012-03-15T17:38:48.220 に答える