Win32 API 日本語リファレンス
ホームUI.Shell › IFileDialogEvents

IFileDialogEvents

COM
IID973510db-7d7f-452b-8975-74a85828d354継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

共通ファイルダイアログ内で発生するイベントの通知を可能にするメソッドを公開します。

解説(Remarks)

実装するタイミング

IFileDialogEvents は、共通ファイルダイアログブラウザーのクライアントであるアプリケーションによって実装されます。実装しないメソッドは E_NOTIMPL を返す必要があります。IFileDialogEvents の例は、Common File Dialog SDK サンプルにあります。

メソッド 7

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT OnFileOk(IFileDialog* pfd)

ダイアログが結果を返して閉じる直前に呼び出されます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。

戻り値

型: HRESULT

実装は、ダイアログの現在の結果を受け入れる場合は S_OK を、拒否する場合は S_FALSE を返す必要があります。S_FALSE の場合、ダイアログは開いたままになります。

解説(Remarks)

このメソッドが呼び出されると、IFileDialog::GetResult メソッドおよび GetResults メソッドを呼び出すことができます。

アプリケーションは、このコールバックメソッドを使用して、ダイアログが閉じる前に追加の検証を行ったり、ダイアログが閉じるのを防いだりすることができます。アプリケーションがダイアログが閉じるのを防ぐ場合は、原因を示す UI を表示する必要があります。UI の親 HWND を取得するには、IFileDialog::QueryInterface を通じて IOleWindow インターフェイスを取得し、IOleWindow::GetWindow を呼び出します。

アプリケーションは、ファイルのオープンまたは保存に関わるすべての処理を行うためにこのメソッドを使用することもできます。

vtbl 4 HRESULT OnFolderChanging(IFileDialog* pfd, IShellItem* psiFolder)

IFileDialogEvents::OnFolderChange の前に呼び出されます。これにより、実装者は特定の場所への移動を停止できます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。
psiFolderIShellItem*inダイアログが移動しようとしているフォルダーを表すインターフェイスへのポインターです。

戻り値

型: HRESULT

成功した場合は S_OK を、それ以外の場合はエラー値を返します。S_OK または E_NOTIMPL の戻り値は、フォルダーの変更を続行できることを示します。

解説(Remarks)

呼び出し元のアプリケーションは、このコールバック中に IFileDialog::SetFolder を呼び出して、移動先を別のフォルダーにリダイレクトできます。実際の移動は、IFileDialogEvents::OnFolderChanging が戻るまで発生しません。

呼び出し元のアプリケーションが単に特定のフォルダーへの移動を防ぐ場合は、制限の説明を含む UI を表示する必要があります。UI の親 HWND を取得するには、IFileDialog を通じて IOleWindow インターフェイスを取得し、IOleWindow::GetWindow を呼び出します。

vtbl 5 HRESULT OnFolderChange(IFileDialog* pfd)

ユーザーが新しいフォルダーに移動したときに呼び出されます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

IFileDialogEvents::OnFolderChange は、ダイアログが開かれるときに呼び出されます。

vtbl 6 HRESULT OnSelectionChange(IFileDialog* pfd)

ユーザーがダイアログのビュー内で選択を変更したときに呼び出されます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 7 HRESULT OnShareViolation(IFileDialog* pfd, IShellItem* psi, FDE_SHAREVIOLATION_RESPONSE* pResponse)

アプリケーションが、オープンまたは保存操作で発生する共有違反に応答できるようにします。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。
psiIShellItem*in共有違反が発生したアイテムを表すインターフェイスへのポインターです。
pResponseFDE_SHAREVIOLATION_RESPONSE*out共有違反への応答を示す FDE_SHAREVIOLATION_RESPONSE 列挙体の値へのポインターです。

戻り値

型: HRESULT

このメソッドが実装されていない場合、実装者は E_NOTIMPL を返す必要があります。それ以外の場合は S_OK または適切なエラーコードを返します。

解説(Remarks)

このメソッドが呼び出される前に、IFileDialog::SetOptions を通じて FOS_SHAREAWARE フラグを設定する必要があります。

共有違反は、アプリケーションがファイルを開こうとしたときに発生する可能性があります。これは、ダイアログがファイルをテストした時点とアプリケーションがそれを開いた時点との間にファイルがロックされる可能性があるためです。

vtbl 8 HRESULT OnTypeChange(IFileDialog* pfd)

ダイアログが開かれたときに、最初に選択されたファイルタイプをアプリケーションに通知するために呼び出されます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。

戻り値

型: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、最初に選択されたファイルタイプをアプリケーションに通知するためにダイアログが開かれたときに呼び出されます。アプリケーションに、タイプの変更に応答する IFileDialogEvents のコードがある場合、そのタイプに応答できます。たとえば、特定のコントロールを非表示にできます。アプリケーションは初期ファイルタイプを制御し、独自のチェックを行うことができるため、このメソッドは便宜のために提供されています。

vtbl 9 HRESULT OnOverwrite(IFileDialog* pfd, IShellItem* psi, FDE_OVERWRITE_RESPONSE* pResponse)

ユーザーがファイルの上書きを選択したときに、保存ダイアログから呼び出されます。

pfdIFileDialog*inダイアログを表すインターフェイスへのポインターです。
psiIShellItem*in上書きされるアイテムを表すインターフェイスへのポインターです。
pResponseFDE_OVERWRITE_RESPONSE*out上書きの可能性がある操作への応答を示す FDE_OVERWRITE_RESPONSE 列挙体の値へのポインターです。

戻り値

型: HRESULT

このメソッドが実装されていない場合、実装者は E_NOTIMPL を返す必要があります。それ以外の場合は S_OK または適切なエラーコードを返します。

解説(Remarks)

このメソッドが呼び出される前に、IFileDialog::SetOptions を通じて FOS_OVERWRITEPROMPT フラグを設定する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。