混合 mfc 对话框和 mdi 项目的调试版本崩溃

Crash in debug build for mixed mfc dialog and mdi project

我正在开发一个混合了对话框和 MDI 的项目。该项目以选项卡式对话框项目开始。后来加入了 MDI。单击其中一个选项卡时,将调用 MDI。如果不单击特定选项卡,它仍然只是一个基于对话框的项目。 该项目在发布版本中运行良好。当我进行调试构建时,当我单击初始化 MDI 主框架和 window 的选项卡时,我遇到了崩溃。下面给出的是为创建 MID window 而执行的一段代码。 崩溃信息是 MarkBullV3.exe 中 0x590C0983 (msvcr120d.dll) 的未处理异常:0xC000041D:在用户回调期间遇到未处理的异常。

非常感谢任何帮助。如有任何问题,请随时提出。

感谢和问候, 拉凯什

            pDocTemplate = new CMultiDocTemplate(IDR_Test1TYPE,
            RUNTIME_CLASS(CTest1Doc),
            RUNTIME_CLASS(CChildFrame), //custom MDI child frame
            RUNTIME_CLASS(CTest1View));
        if (!pDocTemplate)
            return FALSE;
        AddDocTemplate(pDocTemplate);



        pMainFrame = new CMainFrame;
        if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME1))
        {

            delete pMainFrame;
            return FALSE;
        }

        m_pMainWnd = pMainFrame;

            for (i = 0; i < 16; i++)
            theApp.OnFileNew();


        CCommandLineInfo cmdInfo;
        ParseCommandLine(cmdInfo);
        pMainFrame->ShowWindow(m_nCmdShow);

        pMainFrame->UpdateWindow();

        totCustomPlotCount = 0;

/////////////////////堆栈下方//////////////////// //////////////////

msvcr120d.dll!_CrtDbgBreak() Line 87    C
msvcr120d.dll!_VCrtDbgReportA(int nRptType, void * returnAddress, const char * szFile, int nLine, const char * szModule, const char * szFormat, char * arglist) Line 290    C
msvcr120d.dll!_CrtDbgReportV(int nRptType, void * returnAddress, const char * szFile, int nLine, const char * szModule, const char * szFormat, char * arglist) Line 262 C
msvcr120d.dll!_CrtDbgReport(int nRptType, const char * szFile, int nLine, const char * szModule, const char * szFormat, ...) Line 279   C
mfc120d.dll!AfxAssertFailedLine(const char * lpszFileName, int nLine) Line 24   C++
mfc120d.dll!CScrollView::OnPrepareDC(CDC * pDC, CPrintInfo * pInfo) Line 387    C++
mfc120d.dll!CView::OnPaint() Line 185   C++
mfc120d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2448    C++
mfc120d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2094  C++
mfc120d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 282    C++
mfc120d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 435 C++
mfc120d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 299 C++
user32.dll!744084f3()   Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]    
[External Code] 
V3.exe!V10App::InitInstance() Line 291  C++
[External Code] 
V3.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int nCmdShow) Line 26    C++
[External Code] 

////////////////堆栈结束 //////////////////////// ////////////

您可以很容易地看到,您在函数 CScrollView::OnPrepareDC 的第 387 行获得了一个 ASSERT。位于 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\src\mfc\viewscrl.cpp

正如您在调试输出和源代码中看到的那样,原因是:

错误:在绘制滚动视图之前必须调用 SetScrollSizes() 或 SetScaleToFitSize()。