在基于对话框模式中,如何先显示登录对话框,当输入正确后才显示主窗口,当输入错误时就继续显示登录对话框!这样如何实现!急!

解决方案 »

  1.   

    在oninitdialog中
    domodal一个登陆对话框
      

  2.   

    在你建的工程里,在工程名.cpp这个文件中,在InitInstance()这个函数里,在创建主窗体对话框语句前面加上
    Logon dlg;
    if ( dlg.DoModal() != IDOK )
    exit(0);类似的代码,具体密码错误甚么的还是得靠你自己解决了
      

  3.   


    for(int i = 1 ; i < 4; ++ i)////这里4表示用户只能连续输入4次尝试
    {
    if (dlg.DoModal() == IDOK)
    {
    strncpy(chName, dlg.m_EditName, 256);
    strncpy(chPWD, dlg.m_EditPwd, 256);

    bool bPass = false;
    ////比较用户密码正确性
    if (! bPass
    {
    if (i < 3 + 1)
    {
                   
                        if (i < 3)
                        {
        AfxMessageBox("用户名或密码错误,请重试。");
                            continue;
                        }
                        else
                            return 0;
    }
    else
    //AfxMessageBox("您的用户权限错误,不能继续。");
    return 0;
    }
    else
    //break;
    return 1; }
    else
    {
    //theApp.m_pMainWnd;->SendMessage(WM_CLOSE);
           return -1;
    }
    }
      

  4.   

    简单一点 在App的InitInstance()里就可以了。
    先打开登录对话框,登录成功后关掉,然后再打开主对话框。
    比如在OnOK这里,发送登录消息,然后不调用CDialog::OnOK(),一直等消息。如果接收登录成功,直接OnOK,如果不成功,提示是否重试或退出。
      

  5.   

    在oninitdialog中 
    里调用对话框验证用户,成功GOON
    失败RETRUN继续验证
      

  6.   

    在InitInstance中
    做个3次的循环,调用登录对话框的DoModal,如果其中一次登录成,跳出循环,继续;如果三次都不成,return FALSE
      

  7.   

    To smaltdd :
       当密码输入错误时,再返回运行dlg.DoModal() == IDOK时,程序就会出错了!"重试"后,程序就会跟进这里:
    BOOL CGdiObject::Attach(HGDIOBJ hObject)
    {
    ASSERT(m_hObject == NULL);      // only attach once, detach on destroy
    if (hObject == NULL)
    return FALSE;
    CHandleMap* pMap = afxMapHGDIOBJ(TRUE); // create map if not exist
    ASSERT(pMap != NULL);
    pMap->SetPermanent(m_hObject = hObject, this);
    return TRUE;
    }
    是什么原因呢?请指点!
      

  8.   

    不要用dlg.DoModal()   ==   IDOK
    因为你并没有要求次数
    去登陆对话框中响应按钮事件
    如果正确就cdialog::onok()
    否则,警告出错,
      

  9.   

    和主窗口一起消失???
    退出登录对话框就是cdialog::onok()