Vistaでは、インターフェイスIFileDialog :: SetFilterが導入されました。これにより、すべての潜在的なファイル名に対して呼び出されるフィルターをセットアップして、ユーザーに表示する必要があるかどうかを確認できます。
MicrosoftはWindows7でそれを削除し、XPではサポートしていませんでした。
エンドユーザーに表示するファイルを制御できるように、[ファイルを開く]ダイアログをカスタマイズしようとしています。これらのファイルは、製品コードで内部的にマークされています-ファイル名自体にはフィルタリングするものがありません(したがって、ファイル拡張子フィルターはここでは役に立ちません-=実際に各ファイルに問い合わせて、追加のフィルター内にあるかどうかを確認する必要がありますユーザーが指定したパラメーター)。
あまりにも頻繁に遅すぎたので、MicrosoftはSetFilterインターフェースを削除したと思います。ネットワークやクラウドストレージにうまく対応できない、これに似たあらゆる種類のアイデアを想像することができます。
ただし、同じ目標を達成する代替インターフェイスがあるかどうか、またはファイルダイアログでフィルタリングの目的でファイル拡張子のみを表示するように制限されているかどうかを知る必要がありますか?
フォローアップ:
OPENFILENAMEのプレビスタバージョンを必要とするCDN_INCLUDEITEMをさらに調べたところ、これが想像できる最も役に立たないAPIであることがわかりました。非ファイルシステムオブジェクトのみをフィルタリングします。つまり、ファイルのフィルタリングには使用できません。またはフォルダ。ファイルを開くまたは保存するダイアログで99.99%の確率でフィルタリングするものです。信じられない!
リストビューが更新されるたびに、リストビューコントロールから問題のある各ファイル名を削除する手法を提供するPaulDiLasciaによる非常に古い記事があります。
ただし、苦い経験から、リストビューは時間の経過とともに更新される可能性があることを知っています。大きなフォルダー(多くのアイテム)を表示している場合、または接続が少し遅い場合(サーバーの負荷が高い場合やファイルの数が多い場合)、ファイルはダイアログに少しずつ追加されます。したがって、問題のあるファイル名を繰り返し除外する必要があります。
実際、現在カスタマイズされているファイルを開くダイアログでは、タイマーを使用してビューのファイル名のリストを定期的に確認し、特定のパターンのファイルが存在するかどうかを確認して、別のコントロールを有効にします。それ以外の場合は、これらのファイルの存在を確認して何も検出できませんが、しばらくするとビューが更新されてファイル名が増え、ビューが変更されたことを示すイベントがダイアログに送信されません。実際、何年にもわたって共通のコントロールファイルダイアログのコードを記述して維持しなければならなかった私の経験では、Microsoftはそのようなものを書く方法に関してあまり手がかりがありません。イベントは不完全で、役に立たない時間に送信され、不要なときに繰り返され、有用な通知のクラス全体が存在しません。
悲しいことに、私はこの考えをあきらめなければならないかもしれないと思います。ユーザーがビューを操作しようとしているときに、ビューが自然に変化するのにどのように対応できるかについて誰かが考えていない限り(つまり、リストビューからエントリを削除して、ユーザーの視覚的な位置を変更するのは厄介です。 、または強調表示されたファイル、またはスクロール位置など)