CFileDialogについて

[戻る]
rion [E-Mail] 2002/07/04(木) 21:31:07
はじめまして、rionと申します。
最近VC++を使い始めたのですが壁に当たってしまったのでよろしくお願いします。
表題通りCFileDialogについてなのですが
CFileDialogとはどういう風に扱えばいいのでしょうか?
ボタンをクリックしたら、コモンダイアログが出てくるように
プログラムをしたつもりなのですが、コモンダイアログが出てきません。
これは見た方が早いだろうと感じたためソースコードをそのままUP致しました。
http://membres.lycos.fr/yt2r3egds/mono/test.zip
サイズも26KBと軽いですので、心当たりのある方はどうぞよろしくお願いいたします m
(_ _)m


P.S.
MSDNライブラリも見て参考にしてみたのですが、期待通りに動作してくれませんでした。
検索エンジンで"CFileDialog"の検索ワードで調べてみたりもしたのですが
よほど初歩的なことなのでしょうか…
参考になるサイトがあまり見つかりませんでした。
ただ、1つだけ「WorkSpace」というサイトには解説されていましたので
参考にしてみたのですが…、私の理解が悪いのかもしれません(汗
ちなみに参考にしたサイト「WorkSpace」のURLはこちらになります。
http://www.hi-ho.ne.jp/hawk/index.html
連絡不要のリンクフリーとのことでしたので紹介させて頂きました。

n [E-Mail] 2002/07/04(木) 22:11:06
メンバ関数のDoModal()を呼ぶと表示されますよ。

rion [E-Mail] 2002/07/04(木) 22:16:21
失礼しました。
環境を書き忘れておりました。
OSはWindowsUpdateにて2002年7月4日現在に出ている
修正パッチは全て当てております。

OS    :WindowsXP Professional
開発環境:Visual C++ 6.0 SP5

2002/07/04(木) 22:27:16
>    CFileDialog Sample(TRUE, "mid", "*.mid",
>        OFN_HIDEREADONLY |OFN_FILEMUSTEXIST,
>        "midファイル (*.mid) | *.mid||", NULL);
>    m_FilePath = Sample.GetPathName();
>    UpdateData(FALSE);

これじゃーだめですね
少なくとも Sample.DoModal() がコンストラクターの
後に必要です。例えば

    CFileDialo Dlg;    //// 面倒なのでコンストラクターの引数は省いてある

    if (Dlg.DoModa() ==IDOK) {
        ////  ダイアログでOKボタンを押したとき
        m_FilePath =Dlg.GetPathName();
        ////  以下の行にその他必要な処理を書けばいい
    }

とでも書けばいいのでは

rion [E-Mail] 2002/07/04(木) 22:44:43
nさん、鳥さん、アドバイスありがとうございます。

nさんへ
>メンバ関数のDoModal()を呼ぶと表示されますよ。
なるほど、DoModal()という関数が必要だったのですか…
これは、知りませんでした。
ありがとうございます、調べてみようと思います。
↑のレスでは無視した形になってしまってすみませんでした。
環境を書き足すのに焦っていまして
気が付いてませんでした(汗
今度からもっとよく見るよう気をつけようと思います。

鳥さんへ
>少なくとも Sample.DoModal() がコンストラクターの
>後に必要です。
やはりDoModal()という関数が足りないのですね。
丁寧にソースコードまで書いてくださって本当にありがとうございます。


迅速なアドバイス本当に感謝です。
皆さんにいただいたアドバイスを参考にして
もう一度もう一度チャレンジしたいと思います。
その後の結果をレスにて記載しますので
解決にはチェックを入れますので…

rion [E-Mail] 2002/07/04(木) 22:58:46
[[解決]]
nさん、鳥さん、的確なアドバイス本当にありがとうございました。
先ほどアドバイスを元にソースを書き直してみたところ
無事ダイアログが表示されるようになりました。
ファイルパスも期待通りに表示されております。
書き換えた内容については島さんのソースが本当に役立ちまして
ほとんどそのまま使わせて頂きました。

if (Sample.DoModal() ==IDOK) {
        m_FilePath = Sample.GetPathName();
    UpdateData(FALSE);
}

どうも親切な対応ありがとうございました。

古いスレッドには追加発言できません。