4

Microsoft はCMFCShellTreeCtrl、シェルの名前空間階層をブラウズするためのクラスを提供しています (本質的には、エクスプローラー ウィンドウの左側と同じものです)。

このコントロールはSHGetPathFromIDList()、アイテム ID リストから現在のパス (選択されたアイテム) の文字列表現に移動するために使用します。

関連するオブジェクトが「ファイルシステム上」にない場合でも、最終的に内部シェル階層に一致する任意の文字列を使用して現在の項目を設定することができます。たとえば\\WOLF、Networking ノードの下でマシン WOLF を選択します (WOLF という名前のマシンがあると仮定します)。あなたのLAN上で)。

SHGetPathFromIDList()ただし、ファイル システム上にないシェル アイテムを解決しないことに依存しているため、コントロールからそのようなパスを取得しようとすると、インターフェイスは空白文字列で応答します。

ImprovedSHGetPathFromIDList()ファイルシステム(\ WOLFなど)にないITEMIDLISTで動作するより良い実装を知っている人はいますか?


SelectPath()独自のバージョンのシェル ツリー コントロール自体を提供し、独自のバージョンのGetItemPath()ITEMIDLIST <-> 文字列ロジックを実装して、2 つが完全に対称になるようにすることができます (つまり、GetItemPath() が使用されたのと同じパスを返すようにします)。以前に SelectPath() を正常に実行するには、またはツリー ビュー内の任意のノードに対して)。

ただし、これは、パス名と ITEMIDLIST 間の一般的に改善された往復として、他の場所で使用できます (結局のところ、UNC 名はファイルシステム パスを表現するためのかなり一般的な方法です!)

4

1 に答える 1

2

私の知る限り、ファイルシステム以外のアイテムに対して事前に作成された関数はありません。パス文字列を手動で作成するには、フラグまたはフラグを指定して、各項目でITEMIDLIST使用を繰り返す必要があります。IShellFolder::GetDisplayNameOf()SIGDN_PARENTRELATIVEPARSINGSIGDN_DESKTOPABSOLUTEPARSING

于 2013-03-15T15:51:11.783 に答える