0

ファイルを開くときに CFileDialog を使用して、ユーザーがクリックするなどして、ダイアログ リスト領域に表示されているファイルのみを選択できるようにする必要があります。ユーザーがファイル名コントロールに名前を入力できないようにします。OPENFILENAME (OFN) 構造体にはいくつかの異なるフラグ ( http://msdn.microsoft.com/en-US/library/ms646839%28v=vs.80%29.aspx ) がありますが、ユーザーがファイル名を入力できないようにします。

私が見た最も近いものは OFN_FILEMUSTEXIST でしたが、それはファイルが存在することを示しているだけです。ユーザーは引き続き名前を入力できます。

新しいクラスを継承せずにこれを行う方法はありますか?

より詳しい情報

不適切なファイルを開く可能性があるため、ファイル名を入力できないようにする必要があります。lpszFilterパラメータを使用してファイル名をフィルタリングし、ファイル名に ABC が含まれる (拡張子ではなく) ファイルのみが表示されるようにします。したがって、ファイル名を入力すると、myCoolFileDEF.ext. ファイルが存在する場合は、ファイル名にABCが含まれるファイルのみを開くことになっていましたが、先に進んでそれを開くことができます (ダイアログはエラー メッセージなしで閉じます) 。

4

2 に答える 2

2

以前の回答ノートのように、ファイル名コントロールのダイアログでルートアラウンドして無効にすることができました。ただし、これにはペナルティがないわけではありません。CFileDialog フック コールバック ロジックをオンにすると、Vista 以降では「新しいスタイル」ではなく「古いスタイル」のファイル ダイアログが表示されます。「新しいスタイル」のファイル ダイアログは、カスタマイズできる内容がはるかに制限されており、私の知る限り、ファイル名コントロールにアクセスする方法はサポートされていません。

あなたの質問を読んで、私の最初の直感は、あなたがソリューションを過剰に設計しているということです.フィルターを指定すると、ユーザーは間違った種類のファイルを選択するためにかなりの労力を費やす必要があり、ほとんどのユーザーはそうしません.それ。もしそうなら、ユーザーはあなたのプログラムよりもよく知っている可能性があります。それが私なら、フィルターを使用するだけで、ファイル ダイアログが閉じた後、返されたファイル名を確認します。必要なパターンと一致しない場合は、メッセージ ダイアログを表示して、ユーザーが'本当に確信しており、彼らがそうであると主張する場合は、とにかくファイルを開きます.

于 2013-04-11T06:51:55.880 に答える