シングルダイアログベースでの、ファイルオープンについて

[戻る]
さとう 2008/10/11(土) 14:38:16
よろしくお願いします。
シングルダイアログベースのプログラムで、ファイル→開くで
ファイルダイアログは出ます、この状態から、
ファイル名を選択して、”開く”ボタン押下後の
実装を行いたいのですが、どこへ記述したら良いのでしょうか?BEGIN_MESSAGE_MAP(CFlo
wChartApp, CWinApp)
    ON_COMMAND(ID_APP_ABOUT, &CFlowChartApp::OnAppAbout)
    // 標準のファイル基本ドキュメント コマンド
    ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
    // 標準の印刷セットアップ コマンド
    ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

これが現在のメッセージマップでして
ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
以降の動作だと思うのですが、MFCの仕組みが、良く分っていないので
要領を得ません、よろしくお願いします。
Compiler VS2005

wclrp ( 'o') 2008/10/12(日) 15:15:21
シングルダイアログベースが何か知らないけど
"開く"ボタンの処理を独自の処理に変えたいということ??

>ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
これを自分のクラスの
ON_COMMAND(ID_FILE_OPEN, &CFlowChartApp::OnFileOpen)
に変えて
CWinApp::OnFileOpen
のソースを参考に
CFlowChartApp::OnFileOpen
を作ることになるでしょう。

ファイルを選んだあとはMFCのドキュメントビューアーキテクチャで
いろいろ裏でやってシリアライズが呼ばれるね。
昔見た時はシリアライズを独自のフォーマットに変えたいなら
DIBLookを参考にしろという説明だったな。今でもそうだと思うけど。
ちょっとMFCの奥にはいると改造面倒だよね。

PATIO 2008/10/14(火) 10:41:57
もしかしてSDIの事を「シングルダイアログベース」と言ってます?
SDIはシングルドキュメントインターフェイスの略で、ダイアログとは関係有りません。
ダイアログベースと言うのはアプリケーションのメインウインドウに
ダイアログタイプのウインドウを使用している物を言います。
この辺の用語については色々調べて見たほうが良いです。
用語が間違っていると旨く伝わらない事が多いので。

で、ダイアログベースならダイアログ上にボタンを作成して
そのボタンが押されたらファイル選択ダイアログを開いてファイルを読込とか
自分で実装しますけれど、SDIやMDIならMFCのクラスに既に既定の動作が
実装されているのでそれが動くと思います。
何処まで自分で処理をやりたいかに寄りますが、特殊な事をするつもりがないなら
MFCのフレームワークの動作を利用して独自実装が必要な部分だけ実装すると
ある程度楽が出来ます。
この場合は、既に挙げられているドキュメント − ビュー アーキテクチャを
使用する事になると思うのでこの辺の勉強をすると実装方法が見えてくると思います。

PATIO 2008/10/14(火) 10:47:43
ちなみにファイルの読み込み部分だけの話なら
CDocumentクラスの派生クラスにSerialize関数を実装すれば、それで済むと思いますよ。
その辺をうまく処理する為のドキュメント − ビュー アーキテクチャなので。

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