最初に表示されるFormView

[戻る]
ゆーすけ 2005/06/03(金) 14:36:10
現在他人様のソースでVC6.0でMFCを勉強中です。教えてください。

SDIのアプリなのですが、A〜Dまでの画面(全てCFormView)があり、
起動時はAの画面が表示されてます。A上でボタンを押すことにより
B〜Dに遷移します。
色々気になることはやってみようと思い、起動時の画面を別のものに
しようとイジりはじめたのですが、仮に起動時にBの画面を表示した
いと思った場合、どこをどのようにすれば良いのでしょうか?
ボタン押下した際にB〜Dへ遷移する関数、及びB〜DからAに画面
を復帰する関数がMainFrame.cppに存在するのですが、起動時にはこ
の関数は呼ばれないため、どこかで起動時にAを表示するロジックが
あると思うのですが、それはどこにあるのでしょうか?
プロパティあたりで設定されるものかと思い探しましたが不明です。

稚拙な質問だとは思いますが宜しくお願いします。

wood 2005/06/03(金) 21:58:59
ソース提示が無いので想像ですけど
XXXAppクラスを定義しているソースの
InitInstanceの中で
最初に表示されるVIEWのOnInitialUpdateなりCreateなり呼んでいるところ
あると思いますけど

SDI複数VIEWのやり方は、MSのサンプル「VSWAP32」しか
私は分かりませんが、他にも方法はあるようなので、違っているかも知れません

VIEW以外のMainFrameやAPPクラスを定義しているソースなど提示
してみてはどうでしょうか?

エートリーぶ 2005/06/04(土) 13:48:42
「ゆーすけ」さん、「wood」さん、はじめまして。

「wood」さんの指摘する↓
>VIEW以外のMainFrameやAPPクラスを定義しているソースなど提示
>してみてはどうでしょうか?
同感です。

私はWin32で使える限り、意地でもVC4.0を使おうかと考えています(笑)。
本来、ソースは公開したくないのですが、一行だけの変更なので・・・。

VC4.0なので、フレームワークが生成した「SDI」の
//        RUNTIME_CLASS(CSmusterView));
を「formview」にするとき
        RUNTIME_CLASS(CSmustView));
と手作業で変更しています。
↓

CSmusterApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CSmusterApp クラスの初期化

BOOL CSmusterApp::InitInstance()
{
    if (!AfxSocketInit())
    {
        AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
        return FALSE;
    }

    // 標準的な初期化処理
    // もしこれらの機能を使用せず、実行ファイルのサイズを小さく
    // したければ以下の特定の初期化ルーチンの中から不必要なもの
    // を削除してください。

#ifdef _AFXDLL
    Enable3dControls();            // 共有 DLL の中で MFC を
使用する場合にはここをコールしてください。 
#else
    Enable3dControlsStatic();    // MFC と静的にリンクしている場合にはここをコ
ールしてください。
#endif

    LoadStdProfileSettings();  // 標準の INI ファイルのオプションをロードしま
す (MRU を含む)
    // アプリケーション用のドキュメント テンプレートを登録します。ドキュメント 
テンプレート
    // はドキュメント、フレーム ウィンドウとビューを結合するために機能します。

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
        IDR_MAINFRAME,
        RUNTIME_CLASS(CSmusterDoc),
        RUNTIME_CLASS(CMainFrame),       // メイン SDI フレーム ウィン
ドウ
//        RUNTIME_CLASS(CSmusterView));
        RUNTIME_CLASS(CSmustView));

    AddDocTemplate(pDocTemplate);

    // DDE、file open など標準のシェル コマンドのコマンドラインを解析します。
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);

    // コマンドラインでディスパッチ コマンドを指定します。
    if (!ProcessShellCommand(cmdInfo))
        return FALSE;

    return TRUE;

}

追伸
私としては、皆さんが「いつごろ」64ビットにするのか
関心があります。

ゆーすけ 2005/06/06(月) 11:50:39
[[解決]]
遅くなりました。
woodさん、エートリーぷさん回答有難うございます。
抜粋ですが、以下の部分ですね。
---------------------------------------
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CTest4Doc),
    RUNTIME_CLASS(CMainFrame),  // メイン SDI フレーム ウィンドウ
    //RUNTIME_CLASS(CTest4View));←ここ!!
    RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
---------------------------------------
画面切り替えのロジック部分にも「RUNTIME_CLASS」とあったので、
それをキーワードに探していたのですが、しっかり見落としてました(>_<)
有難うございました。やっぱMFCって奥が深いです。
これからも精進いたします。ありがとうございました。

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