我要做一个程序,其中要使用登陆对话框,那我 要掌握的是,当程序可判断用户名跟密码正确之后,如何调用下一个对话框?
该程序完整可在这下载http://www.code365.com/tupian/2005/12/16/2005121621184495.rar登陆框输入密码,用户名后判断用户输入的正确与否似乎是这段:void CLogonDlg::OnOK() 
{
UpdateData();
if(m_strAdmin.IsEmpty() || m_strPass.IsEmpty())  
{
AfxMessageBox("请输入用户名和密码");
}
else
{
CString sql="SELECT * FROM Admin where AdminName='"+theApp.g_Admin+"' and pwd='"+m_strPass+"'";
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");  //查询数据库,看是否有此用户名和密码 m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);

if(m_pRecordset->adoEOF)  //如果没有此用户名和密码
{
MessageBox("请输入正确的用户名和密码","错误",MB_ICONEXCLAMATION);
SetDlgItemText(IDC_EDIT1,"");
GetDlgItem(IDC_EDIT1)->SetFocus();
}
else
{
theApp.g_Admin=m_strAdmin;
theApp.g_Pass=m_strPass;
CDialog::OnOK();
}
}
catch (_com_error e)
{
CATCH_ERROR;
return;
}
}
}
------------------------------------
所以,从该段程序,我不知道他判断完用户名和密码是否正确之后,是如何调用下面的程序窗口的?拜求达人!!!!

解决方案 »

  1.   

    CLogonDlg为一模态对话框,密码正确之后他调用了CDialog::OnOK();,于是对话框结束,后来的程序开始运行,显示主界面,自然而然的事,登陆对话框起一个挂起程序的作用。
      

  2.   

    比如在C...App::InitInstance()中适当的地方:CLogonDlg dlgLogon;
    if (dlgLogon.DoModal() != IDOK)
        return FALSE;  //退出程序
    //当然不退出的话就是继续下面的程序,比如创建和显示主界面。
      

  3.   

    在主对话框出现的时候,先把它隐藏,调出密码框,
    如果错了,还保持在原地.如果密码对了,就OnOk明白了?比如说,在主对话框中的初始化函数中:HIDE WINDOWCPassWord dig;dig.DoModem;SHOW WINDOW
      

  4.   

    简单参考:
    在CLogonDlg添加一个成员变量,初始化为FALSE:
    BOOL m_bOK;
    在CLogonDlg::OnOK()中:
    {
    if(验证通过)
    m_bOK = TRUE;
    }然后:
    CLogonDlg dlg;
    dlg.DoModal();if(dlg.m_bOK == TRUE)
    {
    执行主程序;
    }
    else
    {
    退出程序;
    }
      

  5.   

    http://blog.csdn.net/lixiaosan/archive/2006/04/11/658248.aspx第8点
      

  6.   

    viewerviewer兄:你说的我似乎明白,但CLogonDlg dlg;
    dlg.DoModal();if(dlg.m_bOK == TRUE)
    {
    执行主程序;
    }
    else
    {
    退出程序;
    }
    这个,“执行主程序” 怎么执行呢?
      

  7.   

    直接在
    if(dlg.m_bOK == TRUE)
    {
    执行主程序;
    }
    在执行主程序里面加入CMainDlg dlg;
    dlg.DoModal();就可以启动主对话框了`~~
    其中一定要把MainDlg.h加入进来~~~
      

  8.   

    BOOL CDispatchApp::InitInstance()
    {
        CString strTitle;
        strTitle.LoadString(IDS_TITLE);
        m_hOnlyMutex = ::CreateMutex(NULL, FALSE, strTitle);
        if (::WaitForSingleObject(m_hOnlyMutex, 0) == WAIT_TIMEOUT)
        {
            MessageBox((HWND)this->m_pMainWnd, "应用程序已经运行", "调度管理", MB_ICONINFORMATION | MB_OK);
            return FALSE;
        } CoInitialize(NULL);
    theApp.ReadConfig(); CDispatchLoginDlg dlgLogin;
    if (IDOK != dlgLogin.DoModal())
    {
    //MessageBox(NULL, _T("登陆失败"), _T("调度管理"), MB_ICONEXCLAMATION | MB_OK);
    return FALSE;
    }.............
    .............}int DispatchApp::ExitInstance() 
    {
     
    CoUninitialize( );                      //关闭COM组件库,释放COM资源
        if (m_hOnlyMutex)
            CloseHandle(m_hOnlyMutex); return CWinApp::ExitInstance();
    }
      

  9.   

    BOOL CPasswordApp::InitInstance()
    {
    int nCount=0;
    while(nCount<3)
    {
    CPasswordDlg PassDlg;//CPasswordDlg相当于登陆对话框
    if(PassDlg.DoModal()==IDOK)
    {
    if((strcmp(PassDlg.m_strPassword,"1234")!=0)||
    (strcmp(PassDlg.m_strUser,"rj2003")!=0))
    {
    MessageBox(NULL,"用户名或口令错误,请重试!","错误信息",MB_OK|MB_ICONERROR);
    nCount++;
    }
    else  
    break;
    }
    else
    return FALSE;
    }//////////while if(nCount>=3)
    {
    MessageBox(NULL,"口令输入已经超过三次,请退出!","错误信息",MB_OK|MB_ICONERROR);
    return  FALSE;
    }
    ////////////////////////////////////////////
    AfxEnableControlContainer(); ........
    // The one and only window has been initialized, so show and update it.
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow(); return TRUE;
    }