IShellView2
COM公式ドキュメント
IShellView の機能を拡張します。
解説(Remarks)
このインターフェイスは、継承元である IShellView インターフェイスのメソッドも提供します。
実装するタイミング
名前空間拡張が IShellView の範囲を超えたサービスをクライアントに提供する場合は、IShellView2 を実装してください。使用するタイミング
このインターフェイスを直接呼び出すことはありません。IShellView2 は、アプリケーションがこのインターフェイスを認識していることをオペレーティングシステムが確認した場合にのみ、システムによって使用されます。IShellView と IShellView2 を公開するオブジェクトは、通常、他のシェルフォルダーオブジェクトによって作成されます。メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
現在のシェルビューまたは既定のシェルビューを、この IShellView2 実装がサポートするその他すべての有効なビュー識別子 (VID) とともに要求します。
| pvid | GUID* | inout | 要求するビューの GUID へのポインター。次のビューが Shlguid.h で定義されています。 VID_LargeIcons{0057D0E0-3573-11CF-AE69-08002B2E1262} VID_SmallIcons{089000C0-3573-11CF-AE69-08002B2E1262} VID_List{0E1FA5E0-3573-11CF-AE69-08002B2E1262} VID_Details{137E7700-3573-11CF-AE69-08002B2E1262} VID_Tile{65F125E5-7BE1-4810-BA9D-D271C8432CE3} |
| uView | DWORD | in | 要求するビューの種類。 SV2GV_CURRENTVIEW現在のシェルビュー。 SV2GV_DEFAULTVIEW既定のシェルビュー。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は標準的な COM エラーコードを返します。
解説(Remarks)
IShellView2::GetView は「ビューセット」を取得します。これは、要求されたビュー (既定または現在) と、この IShellView2 インスタンスのその他すべての有効なビューをまとめたものです。SV2GV_CURRENTVIEW を指定して IShellView2::GetView を呼び出すと、現在のビューを表す GUID が返されるとともに、有効な VID が列挙されます。この情報は、新しいビューを表示する前に検証する際に使用するために格納されます。
ビューは他の要因によっても影響を受けることがあります。ユーザーが フォルダー オプション ウィンドウで すべてのフォルダーに適用 ボタンを押すと、グローバルなユーザー既定の VID と ビューモード が設定されます。VID は SV2GV_CURRENTVIEW フラグを指定した IShellView2::GetView によって決定され、ビューモードは GetCurrentInfo によって決定されます。ビューは、永続化されたフォルダー既定によっても影響を受けることがあります。Windows エクスプローラーは、ユーザーが過去に訪れたフォルダーの VID とビューモードを保存します。場合によっては、移動元のフォルダーが、移動先の新しいビューに対して作成されるビューモードに影響を与えることもあります。
これらさまざまなビューの優先順位は、一般的に次のとおりです。
- 永続化されたフォルダー既定
- グローバルなユーザー既定
- 既定のビュー (SV2GV_DEFAULTVIEW)
- 前回のビュー
新しいシェルビューウィンドウの作成を要求するために使用します。これは、Windows エクスプローラーの右ペインでも、フォルダーウィンドウのクライアントウィンドウでもかまいません。
| lpParams | SV2CVW2_PARAMS* | in | 新しいビューウィンドウを定義する SV2CVW2_PARAMS 構造体へのポインター。 |
戻り値
型: HRESULT
成功した場合は成功コードを返し、それ以外の場合は COM エラーコードを返します。操作が成功したか失敗したかを判定するには、SUCCEEDED マクロおよび FAILED マクロを使用してください。
解説(Remarks)
このメソッドは CreateViewWindow に取って代わるものです。CreateViewWindow2 では、開発者は CreateViewWindow が提供する標準的なビューモードに制限されず、独自のビューモードを作成することもできます。すべてのビューモードは、その GUID によって識別されるようになりました。
構造体のサイズ、以前のビューウィンドウ、フォルダー設定、親シェルブラウザー、およびビュー矩形は、lpParams の最初の 5 つのメンバーで IShellView2::CreateViewWindow2 に渡されます。このメソッドは、新しいウィンドウを作成し、そのウィンドウハンドルとビューモードの GUID を最後の 2 つのパラメーターで返す役割を担います。IShellView2::CreateViewWindow2 は、親ブラウザーの IShellBrowser::AddRef メソッドを呼び出し、そのインターフェイスポインターを格納する必要があります。このポインターは、Windows エクスプローラーウィンドウとの通信に使用できます。
アイテムの識別子を変更するために使用します。
| pidlNew | ITEMIDLIST* | in | ITEMIDLIST 構造体へのポインター。現在の識別子が渡され、新しいものに置き換えられます。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM で定義されたエラーコードを返します。
シェルビュー内のアイテムを選択して配置します。
| pidlItem | ITEMIDLIST* | in | 対象のアイテムを一意に識別する ITEMIDLIST 構造体へのポインター。 |
| uFlags | DWORD | in | 適用する選択の種類を指定する _SVSIF 定数のいずれか。 |
| ppt | POINT* | in | 新しい位置を含む POINT 構造体へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellView2 "{88E39E80-3578-11CF-AE69-08002B2E1262}" #usecom global IShellView2 IID_IShellView2 "{}" #comfunc global IShellView2_GetView 16 var,int #comfunc global IShellView2_CreateViewWindow2 17 var #comfunc global IShellView2_HandleRename 18 var #comfunc global IShellView2_SelectAndPositionItem 19 var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IShellView2 "{88E39E80-3578-11CF-AE69-08002B2E1262}" #usecom global IShellView2 IID_IShellView2 "{}" #comfunc global IShellView2_GetView 16 sptr,int #comfunc global IShellView2_CreateViewWindow2 17 sptr #comfunc global IShellView2_HandleRename 18 sptr #comfunc global IShellView2_SelectAndPositionItem 19 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。