「平成」を感じるもの

下記URLのサンプルコード
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_M …
を参考に、VC++2005(MFC)にてMDIアプリケーションを作成しています。
正常に動作すれば、プログラム起動時に2つのウィンドウが表示されるはずですが、
問題箇所「DEBUG!!!」にて、
「MDITest1.exe の 0x00416420 でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。」
といったエラーが発生し、実行が出来ない状態です。
下記にソースコードを記載します。ベタ貼りで申し訳ありません。。
「☆☆☆追加☆☆☆」で囲まれた箇所が上記URL解説を元に自分で追加した箇所で、
それ以外はスケルトンなので、基本的にサンプルコードと同じです。
解決策ご存知の方おられましたら、お手数ですがご教授お願い致します。

【呼び出し元クラス:CMDITest1App】
BOOL CMDITest1App::InitInstance(){
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
SetRegistryKey(_T("アプリケーション ウィザードで生成されたローカル アプリケーション"));
LoadStdProfileSettings(4); // 標準の INI ファイルのオプションをロードします (MRU を含む)
// アプリケーション用のドキュメント テンプレートを登録します。ドキュメント テンプレート
// はドキュメント、フレーム ウィンドウとビューを結合するために機能します。
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MDITest1TYPE,
RUNTIME_CLASS(CMDITest1Doc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(CMDITest1View));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);

//☆☆☆追加☆☆☆
CMultiDocTemplate* pDocTemplate2;
pDocTemplate2 = new CMultiDocTemplate(IDR_MDITest1TYPE2,
RUNTIME_CLASS(CMDITest1Doc),
RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
RUNTIME_CLASS(CMDITest1View2));
if (!pDocTemplate2)
return FALSE;
AddDocTemplate(pDocTemplate2);
//☆☆☆追加☆☆☆

// メイン MDI フレーム ウィンドウを作成します。
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;
// 接尾辞が存在する場合にのみ DragAcceptFiles を呼び出します。
// MDI アプリケーションでは、この呼び出しは、m_pMainWnd を設定した直後に発生しなければなりません。

//☆☆☆追加☆☆☆
pMainFrame->OpenView(pDocTemplate2);
//☆☆☆追加☆☆☆

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

// コマンド ラインで指定されたディスパッチ コマンドです。アプリケーションが
// /RegServer、/Register、/Unregserver または /Unregister で起動された場合、False を返します。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
// メイン ウィンドウが初期化されたので、表示と更新を行います。
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}

【呼び出し先クラス:CMainFrame】※問題箇所有り
void CMainFrame::OpenView(CDocTemplate *pTemplate){
CDocument* pDoc = MDIGetActive()->GetActiveDocument();   //DEBUG!!!
CMDIChildWnd* pNewFrame = (CMDIChildWnd*)pTemplate->CreateNewFrame(pDoc, NULL);
if( pNewFrame )
pTemplate->InitialUpdateFrame(pNewFrame, pDoc);
}

A 回答 (1件)

スライダーを追加したダイアログの『Style』を『子』に変更してみましょう


『ポップアップ』のままですとエラーになると思います

この回答への補足

ご回答ありがとうございます。
Styleを「子」に変更しましたが、エラーは消えませんでした。。。

補足日時:2009/02/10 09:19
    • good
    • 0
この回答へのお礼

pMainFrame->OpenView(pDocTemplate2);
を最後にもってくることで解決しました!
ご回答ありがとうございました。

お礼日時:2009/02/10 16:30

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


おすすめ情報