1

Microsoftが[共通項目]ダイアログボックスの使用を推奨していることは知っていますが、古いコードを使用していますGetOpenFileName()GetSaveFileName()

GetOpenFileName()ユーザーが特定のディレクトリ内のファイルのみを選択できるように制限するにはどうすればよいですか?

たとえば、ユーザーが「Images」ディレクトリからファイルを選択できるようにするだけです。ファイルを開くときに他のディレクトリに移動できないようにします。「Images」ディレクトリからファイルを選択する必要があります。

フラグOFN_NOCHANGEDIRは私が必要としているもののように聞こえますが、ユーザーがファイルを開くときに現在のディレクトリを変更すると、現在のディレクトリが元のディレクトリに戻るだけです。

で不可能な場合GetOpenFileName()、新しい共通アイテムダイアログで可能ですか?

4

1 に答える 1

2

GetOpenFileName()およびの場合GetSaveFileName()、フィールドにコールバック プロシージャを割り当てることができますOPENFILENAME::lpfnHook。通知を受信したら、ダイアログにメッセージCDN_FILEOKを送信して、選択したフォルダーを取得します。CDM_GETFOLDERPATHフォルダーが受け入れられない場合は、ユーザーにメッセージを表示し、呼び出してゼロ以外の値SetWindowLong()を設定して選択したファイルを拒否DWL_MSGRESULTし、フック プロシージャからゼロ以外の値を返します。

更新:IFileOpenDialogおよびIFileSaveDialogの場合、イベント コールバックを実装して、または以外IFileDialogEvents::OnFolderChangingのエラー値を返すだけで、不要なフォルダーへの移動を防ぐことができます。HRESULTS_OKE_NOTIMPL

于 2012-11-18T19:43:20.397 に答える