IFileDialogEvents
COM公式ドキュメント
共通ファイルダイアログ内で発生するイベントの通知を可能にするメソッドを公開します。
解説(Remarks)
実装するタイミング
IFileDialogEvents は、共通ファイルダイアログブラウザーのクライアントであるアプリケーションによって実装されます。実装しないメソッドは E_NOTIMPL を返す必要があります。IFileDialogEvents の例は、Common File Dialog SDK サンプルにあります。メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ダイアログが結果を返して閉じる直前に呼び出されます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
戻り値
解説(Remarks)
このメソッドが呼び出されると、IFileDialog::GetResult メソッドおよび GetResults メソッドを呼び出すことができます。
アプリケーションは、このコールバックメソッドを使用して、ダイアログが閉じる前に追加の検証を行ったり、ダイアログが閉じるのを防いだりすることができます。アプリケーションがダイアログが閉じるのを防ぐ場合は、原因を示す UI を表示する必要があります。UI の親 HWND を取得するには、IFileDialog::QueryInterface を通じて IOleWindow インターフェイスを取得し、IOleWindow::GetWindow を呼び出します。
アプリケーションは、ファイルのオープンまたは保存に関わるすべての処理を行うためにこのメソッドを使用することもできます。
IFileDialogEvents::OnFolderChange の前に呼び出されます。これにより、実装者は特定の場所への移動を停止できます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
| psiFolder | IShellItem* | in | ダイアログが移動しようとしているフォルダーを表すインターフェイスへのポインターです。 |
戻り値
解説(Remarks)
呼び出し元のアプリケーションは、このコールバック中に IFileDialog::SetFolder を呼び出して、移動先を別のフォルダーにリダイレクトできます。実際の移動は、IFileDialogEvents::OnFolderChanging が戻るまで発生しません。
呼び出し元のアプリケーションが単に特定のフォルダーへの移動を防ぐ場合は、制限の説明を含む UI を表示する必要があります。UI の親 HWND を取得するには、IFileDialog を通じて IOleWindow インターフェイスを取得し、IOleWindow::GetWindow を呼び出します。
ユーザーが新しいフォルダーに移動したときに呼び出されます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IFileDialogEvents::OnFolderChange は、ダイアログが開かれるときに呼び出されます。
ユーザーがダイアログのビュー内で選択を変更したときに呼び出されます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
アプリケーションが、オープンまたは保存操作で発生する共有違反に応答できるようにします。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
| psi | IShellItem* | in | 共有違反が発生したアイテムを表すインターフェイスへのポインターです。 |
| pResponse | FDE_SHAREVIOLATION_RESPONSE* | out | 共有違反への応答を示す FDE_SHAREVIOLATION_RESPONSE 列挙体の値へのポインターです。 |
戻り値
解説(Remarks)
このメソッドが呼び出される前に、IFileDialog::SetOptions を通じて FOS_SHAREAWARE フラグを設定する必要があります。
共有違反は、アプリケーションがファイルを開こうとしたときに発生する可能性があります。これは、ダイアログがファイルをテストした時点とアプリケーションがそれを開いた時点との間にファイルがロックされる可能性があるためです。
ダイアログが開かれたときに、最初に選択されたファイルタイプをアプリケーションに通知するために呼び出されます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
戻り値
型: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、最初に選択されたファイルタイプをアプリケーションに通知するためにダイアログが開かれたときに呼び出されます。アプリケーションに、タイプの変更に応答する IFileDialogEvents のコードがある場合、そのタイプに応答できます。たとえば、特定のコントロールを非表示にできます。アプリケーションは初期ファイルタイプを制御し、独自のチェックを行うことができるため、このメソッドは便宜のために提供されています。
ユーザーがファイルの上書きを選択したときに、保存ダイアログから呼び出されます。
| pfd | IFileDialog* | in | ダイアログを表すインターフェイスへのポインターです。 |
| psi | IShellItem* | in | 上書きされるアイテムを表すインターフェイスへのポインターです。 |
| pResponse | FDE_OVERWRITE_RESPONSE* | out | 上書きの可能性がある操作への応答を示す FDE_OVERWRITE_RESPONSE 列挙体の値へのポインターです。 |
戻り値
解説(Remarks)
このメソッドが呼び出される前に、IFileDialog::SetOptions を通じて FOS_OVERWRITEPROMPT フラグを設定する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IFileDialogEvents "{973510DB-7D7F-452B-8975-74A85828D354}" #usecom global IFileDialogEvents IID_IFileDialogEvents "{}" #comfunc global IFileDialogEvents_OnFileOk 3 sptr #comfunc global IFileDialogEvents_OnFolderChanging 4 sptr,sptr #comfunc global IFileDialogEvents_OnFolderChange 5 sptr #comfunc global IFileDialogEvents_OnSelectionChange 6 sptr #comfunc global IFileDialogEvents_OnShareViolation 7 sptr,sptr,var #comfunc global IFileDialogEvents_OnTypeChange 8 sptr #comfunc global IFileDialogEvents_OnOverwrite 9 sptr,sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IFileDialogEvents "{973510DB-7D7F-452B-8975-74A85828D354}" #usecom global IFileDialogEvents IID_IFileDialogEvents "{}" #comfunc global IFileDialogEvents_OnFileOk 3 sptr #comfunc global IFileDialogEvents_OnFolderChanging 4 sptr,sptr #comfunc global IFileDialogEvents_OnFolderChange 5 sptr #comfunc global IFileDialogEvents_OnSelectionChange 6 sptr #comfunc global IFileDialogEvents_OnShareViolation 7 sptr,sptr,sptr #comfunc global IFileDialogEvents_OnTypeChange 8 sptr #comfunc global IFileDialogEvents_OnOverwrite 9 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。