int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1; AfxMessageBox("测试");
return 0;
}
这个AfxMessageBox在OnCreate中,使程序发生异常中断.请问这是正常的吗.
以前没有注意这个问题.谢谢

解决方案 »

  1.   

    设置一个break point
    调试看看
      

  2.   

    窗体未建立完成,这时的句柄是不可用的,而AfxMessageBox好像默认就是取的父窗口的句柄,因此出错。
      

  3.   

    用全局MessageBox 
    ::MessageBox(NULL, "测试", NULL, MB_OK);
      

  4.   

    ::MessageBoxA(NULL, "TEST", NULL, MB_OK);
      

  5.   

    我的目的是:MDI子窗口总是最大化显示
    int CChildWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
    {
    if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
    return -1; ::MessageBox(NULL, "测试", NULL, MB_OK); MDIMaximize();
    return 0;
    }
    上面这样就可以,
    MDIMaximize();
    ::MessageBox(NULL, "测试", NULL, MB_OK);
    两句交换位置就不可以.
    CChildWnd这个类是要被继承的.在继承里有可能用到::MessageBox(NULL, "测试", NULL, MB_OK);
    就会总是中断.
      

  6.   

    我用的视图类是继承CScrollView类的。
    他中断在void CScrollView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
    {
    ASSERT_VALID(pDC);#ifdef _DEBUG
    if (m_nMapMode == MM_NONE)
    {
    TRACE(traceAppMsg, 0, "Error: must call SetScrollSizes() or SetScaleToFitSize()");
    TRACE(traceAppMsg, 0, "\tbefore painting scroll view.\n");
    ASSERT(FALSE);
    return;
    }请问谁有防止子窗口切换时闪烁的方法。
      

  7.   

    这个俺好像看见过。。解释如下:
    MessageBox

    AfxMessageBox
    的区别,很重要,
    AfxMessageBox 内部使用的消息机制,即:有一个单独的消息循环,类似于 模态对话框。
    所以AfxMessageBox会独占消息循环,这样就会使其调用者的消息循环无效,只要
    AfxMessageBox 执行完成之后,调用者才会继续接收消息。所以,上面的问题,也许和AfxMessageBox 的模态对话框有关系。