我做了一个登陆模块,想在登陆成功后用模态对话框的方式打开主界面,但是总是出错,用非模态对话框的方式就可以,这是为什么?而且在用非模态对话框的方式打开之后,在主界面中再用同样的方式打开子界面就会出错,这又是为什么? 
void CLoginDlg::OnLogin() 

UpdateData(TRUE); 
CDatabase m_db; 
CUserSet m_UserSet; 
m_db.Open(NULL,FALSE,FALSE,"ODBC;DSN=SC;UID=sa;PWD="); try 

if(m_UserSet.IsOpen()) 
m_UserSet.Close(); 
m_UserSet.m_strFilter.Format("UserID='%s' and PassWord='%s'",m_sUserID,m_sPassWord);; 
m_UserSet.Open(CRecordset::snapshot,NULL,CRecordset::none); 
if(m_UserSet.IsEOF()) 

m_UserSet.Close(); 
MessageBox("不存在该用户或密码不正确"); 
return; 

else 

m_UserSet.Close(); 
// MessageBox("登陆成功"); 
CMainDlg* pDlg; 
// pDlg= new CMainDlg() ; 
// pDlg->Create(IDD_MAIN_DLG,this); 
pDlg->DoModal(); 

} catch(CDBException *e) 

e->ReportError(); 
return; 

}

解决方案 »

  1.   

    有可能你用了局部变量,将CMainDlg Dlg; 声明为全局变量试试
      

  2.   

    CMainDlg* pDlg; 
    // pDlg= new CMainDlg() ; 
    // pDlg->Create(IDD_MAIN_DLG,this); 
    pDlg->DoModal(); 这个是局部变量,函数执行完就析构掉了,把CMainDlg* pDlg; 设成成员变量或全局变量
      

  3.   

    VC做MIS,的确不是他的长处,这方面还不如VB效率高,当然更比不上VFP,Delphi等工具啦。
    楼主应该发挥每个工具的长处啦,而不是一味的强调VC的强大,很多时候VC也有短处的。
    VC的开发领域越来越窄了,不过原来的一些传统领域还是无可替代的