建立一个单文档的应用程序,添加一个对话框作为登录框,当登录成功后,完成文档的创建,进入该程序,点击取消按钮时,取消文档的创建程序退出!
在CMainFrame的OnCreate函数中添加以下代码:
 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
         CTestDlg td;//登录对话框
if(td.DoModal()==IDOK)
{ if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1;      // fail to create
} if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
  sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1;      // fail to create
} // TODO: Delete these three lines if you don't want the toolbar to
//  be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
return 0;
}
else
return -1;

}
点击取消时会出现MFC的消息提示框“建立空文档失败”,放在PreCreateWindow()中也有该提示,如何才能取消该提示框?

解决方案 »

  1.   

    应该把登录框放到C...App::InitInstance()中去。
      

  2.   

    放到InitIntance中来进行.
    如果要放到这里,光return -1可能没有让系统得到需要的预期,可以改成Exit(0)或者其它的直接关闭程序的代码,如:PostQuitMessage(0)等
      

  3.   

    OnCreate是执行创建框架相关的操作的,应该在框架构造之前或者显示之后显示登录框,取消时不构造框架或者发消息让框架关闭,如有必要可以ExitProcess。
      

  4.   

    是应该把登陆部分放在APP类的InitInstance()函数中去,当登陆失败直接在InitInstance()函数中返回FALSE即可。下面的CMainFrame框架类的创建根本就到不了。这也是标准的做法。
      

  5.   

    InitInstance()函数中可以了,感谢各位的帮助!