いつもお世話になっています。
<環境>
WinXP/.NET2003/MFC
ファイル選択ボタンが複数あるアプリを作成しているのですが、
ひとつひとつ選択するのは面倒なので複数同時に選択して、
一括して指定できるボタンも作成しようと思っています。
(個別に選択するボタンも残す必要があります)
個別のほうはシンプルにCFileDialogで問題なく取得できます。
複数のほうもOFN_ALLOWMULTISELECTフラグで問題なく取得できます。
ただし、個別のほう、つまり1ファイルのみ選択した場合は、
OSがどこかで選択したディレクトリを記憶しているようで、
次にCFileDialogを使用した際に、前回オープンしたディレクトリが
デフォルト表示されるようになるのですが、複数ファイルを
選択した場合はその情報が記憶されないのです。
CFileDialog定義以降の使い方はOFN_ALLOWMULTISELECTのフラグ有無以外は同じです。
さらに複数選択可能なダイアログで1ファイルだけを選んだ場合は、
ディレクトリが記憶されます。
OSのどこで記憶されているかは別にしてアプリケーションを終了しても
前回使用したディレクトリを覚えているのは便利なので、
複数選択した場合も記憶させたいのですが、何か方法はないでしょうか?
自分が思いついたのは、個別/複数で共通の変数に使用したディレクトリを格納して、
CFileDialog定義後、m_ofn.lpstrInitialDirへコピーする、という方法で、
上手くいきましたが、アプリケーションを再起動するとリセットされてしまうので、
個別に関しては機能ダウンとなってしまいます。
そもそもどこで記憶されているのか、レジストリを調べてもそれらしいものが
見つからず、ネットで色々検索したのですが、同じような壁に当たった人は
いないようです。
宜しくお願いします。
INIファイルに書き込むとか?
ニさん
ご回答ありがとうございます。
出来ればアプリケーションファイル単体で使用したいので、
iniファイルへの書き込みは最後の手段かなぁと考えております。
やはりOSの記憶される場所については未知の世界なのでしょうか・・。
> やはりOSの記憶される場所については未知の世界なのでしょうか・・。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU
を見てみるとよろしいかと…。
瀬戸っぷ さん
ご回答ありがとうございます。
やはりレジストリにあるんですね。
そこに保存されるかどうかは何で決まるのでしょうか。
もし強制的に書き込める使い方がCFileDialogクラスに
ありましたらご教授頂ければ助かります。
> そこに保存されるかどうかは何で決まるのでしょうか。
勝手に OS が履歴情報として書き込むと思う。
> もし強制的に書き込める使い方がCFileDialogクラスに
> ありましたらご教授頂ければ助かります。
普通にレジストリに書き込むクラスでも使えばいいと思う。
オレンジフィッシュさん
ご回答ありがとうございます。
レジストリを自分でいじるしか方法が無いのであれば、
素直にiniファイルで対応しようと思います。
皆さん、ありがとうございました。