プロが教える店舗&オフィスのセキュリティ対策術

Visual C++のMFCです。

CFileDialogを使ってファイルを指定して開くと、カレントディレクトリの位置が変化して、次回、CFileDialogで開くときは、その変化したあとの最新のディレクトリが開きますね。
このカレントディレクトリは、GetCurrentDirectory で、調べることができました。

しかし、特定のディレクトリ(フォルダ)をCFileDialogで開きたいとき、SetCurrentDirectory で設定しようとしても、これでは、CFileDialogで開くフォルダ位置を変更できません。

CFileDialogで開きたいフォルダ位置を変更するコマンドを教えてください。

DoModal()をする以前に設定したいので、CFileDialogクラスとは別の関数、できれば、SDKの関数等であれば、いいです。

A 回答 (2件)

CFileDialog のメンバにm_ofnというOPENFILENAME構造体があります


その中にさらにlpstrInitialDir というメンバ変数がありこれでイニシャルディレクトリが指定できます
----sample-----
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrInitialDir = TEXT("C:\\");
if (fileDlg.DoModal() == IDOK)
{
MessageBox(fileDlg.m_ofn.lpstrFile);;
}
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。

ただ、ちょっと事情がありまして、

なんとか関数("C:\\");

というのをしてから、

CFileDialog fileDlg(TRUE);
if (fileDlg.DoModal() == IDOK)
{
...
}

としたいのです。
これができるなんとか関数を探しています。
この、なんとか関数は、fileDlgとは関係のない、SDK関数とか、CWindやCViewの関数とかです。

お礼日時:2009/03/13 16:04

lpstrInitialDir が指定できないならOSによって動作が変わります。


XPやVistaでしたらレジストリをいじることになると思います。
XPはHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU
Vistaは同\OpenSavePidlMRU
の各拡張子別にファイルを開くダイアログのファイル名のところで表示されるドロップダウンリストの項目が保存されています。
該当する拡張子でこれの一番上を開きたいディレクトリに変更すると出来るかもしれません(確認はしていません)。
98以前ならカレントディレクトリで設定できたかも
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
わたしの場合は、XPです。

ややこしいようですね。レジストリですか。
プログラムの普通の関数ではできない、ということですね。
(レジストリを触る専用関数は別にして)
CFileDialogで、DoModalをしてファイルを選択すると、そのあと、全く別のところでまた、新たなCFileDialogインスタンスを作ってDoModalをすると、前にファイル選択をしたディレクトリを憶えていて、そのディレクトリが開かれますが、これはCFileDialogの関数内でレジストリを触っているのでしょうか。

マイクロソフトは、ほんとレジストリなんてつまらんもんを作ったために、ほんとめんどくさいですよね。
レジストリは触ると怖いので、別の方法を模索したいと思います。

お礼日時:2009/03/13 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A