GetOpenFileName関数、ファイル選択ダイアログのファイル名フィールド内の文字数を増やします
-
21-08-2019 - |
質問
私たちのアプリは、
(この質問ものCFileDialogなどを...使用して人々に適用されます)複数のファイルがGetOpenFileNameの機能によって示されるファイル選択ダイアログで選択することができます(259マジックナンバーのようです - なぜわからない)ファイル名フィールドに入力できる文字数に制限があるように見える。
私たちは OPENFILENAME の構造:
lpstrFile - 4Kバイトのサイズの私たち自身のバッファをポイントし、 nMaxFile - (私たちはANSIをコンパイルするlpstrFileの大きさに設定されているので、これは効果的に4000である
しかし、これらの値は、ダイアログのファイル名フィールドの入力幅を増加させないように見えます。
私がコントロールにEM_SETLIMITTEXTメッセージを送ることを実験しようとしてますが、誰にも解決策を持っているかどうかを知りたいと思っています。
EDITは - 自分自身にこれを解決:<のhref = "https://stackoverflow.com/questions/361350/increase-number-of-characters-in-filename-field-of-getopenfilename-file-selecti#394443" >私は自分の答えを受け入れることができないが、ここでそれは後世のためにあるのソリューション。その将来サーチャーがトップでそれを見つけるだろうか、私の解決策をアップ国防省気軽に
- 誰がよりよい解決策を持っている場合は、それを投稿してください。解決
は、(少なくとも私の開発環境での)エディットコントロールは、コンボボックスなので、EM_SETLIMITTEXT
が適切でないことが判明します。
その代わり、私は、ファイルを開くダイアログの親にGetDlgCtrl
を使用して、コンボボックスを突き止め(私はOnInitDialog
ハンドラでこれを行う)、その後、CComboBox*
制限を設定するLimitText()
を呼び出すために、それをキャスト。
このもCB_LIMITTEXT
で作業していないあなたの人々のための制御にCFileDialog
メッセージを送信することにより行うことができます。ここでの適切な値は、ほとんどの場合に渡されるOPENFIILENAME.nMaxFile
値である。
他のヒント
から:
(次の段落で説明したいくつかの例外を除いて)は、Windows APIでは、パスの最大長は260の文字として定義され
MAX_PATH
、である。
MAX_PATH
に対して符号化されたAPIを使用しているときに、ダイアログの外に長い文字列を強制できたとしても、あなたはラインの下のトラブルに実行することがあります。
ドキュメントが言うように行くます:
のWindows APIには、多くの機能を持っています それはまたのUnicodeのバージョンを持っています 拡張長さの経路を可能にします 32,767の最大総経路長 文字。パスのこのタイプは、 によって分離された成分からなります 値までバックスラッシュ、各 で返さ のlpMaximumComponentLengthパラメータ GetVolumeInformation機能。に 拡張された長さのパスを指定し、使用
"\\?\"
接頭辞。例えば、"\\?\D:\<very long path>"
。 ( 以下のためにここで使用されている<
>
文字 映像の明瞭さとの一部にすることはできません 有効なパス文字列。)
私はこれをバイパスすることができないハードリミットであると考えています。それは問題でなければならない唯一の時間は制限が最大ファイル名の長さのために十分であるので、あなたは、複数のファイルを選択したいときです。
私は、フォルダ内のすべてのファイルを開くために、これらのダイアログに「すべてのファイル」ボタンを追加しました。それは私が見つけた唯一の回避策です。