一个模态对话框,就是登陆界面,点击登陆后,我要获得输入的用户名,可是点击OK后窗口就销毁了,UpdataDate就导致程序崩溃了。

解决方案 »

  1.   

    CLoginDlg dlg.DoModal();UpdateData(TRUE);
    CString UserName = dlg.m_UserName;
    这样就行了,点击OK后,其中m_UserName是你的登陆对话框的成员变量;这样 你的用户名就保存在UserName中了
      

  2.   

            okOrCan=myLoginDlg.DoModal();
    myLoginDlg.UpdateData(TRUE);
    theApp.m_sUserName = myLoginDlg.m_userName;
    theApp.m_sPassWord = myLoginDlg.m_passWord;
    if(okOrCan==IDOK)
    点击OK就崩了;
      

  3.   

    我用了一个变量关联edit控件的啊
      

  4.   

    如果在对话框中DDX_Text关联变量,调用DoModal判断是否返回IDOK即可
    CDialog默认的OnOK函数会在退出前调用UpdateData,见CDialog::OnOK()的原型函数void CDialog::OnOK()
    {
      if (!UpdateData(TRUE))
      {
        TRACE(traceAppMsg, 0, "UpdateData failed during dialog termination.\n");
        // the UpdateData routine will set focus to correct item
        return;
      }
      EndDialog(IDOK);
    }
    因此直接使用即可if(myLoginDlg.DoModal()==IDOK)
    {
      theApp.m_sUserName = myLoginDlg.m_userName;
      theApp.m_sPassWord = myLoginDlg.m_passWord;
    }
      

  5.   

    当点击OK后才把输入的内容保存起来。
    if(IDOK==myLoginDlg.DoModal())
    {
       myLoginDlg.UpdateData(TRUE);
       theApp.m_sUserName = myLoginDlg.m_userName;
       theApp.m_sPassWord = myLoginDlg.m_passWord;
    }
    或者直接响应EN_CHANGE消息
      

  6.   

    我这是模态的对话框啊,直接调用,虽然没有崩溃,判断语句还是没有作用啊。 while(isRight)
    {

    okOrCan=myLoginDlg.DoModal();
    // myLoginDlg.UpdateData(TRUE);

    if(okOrCan==IDOK)
    {

    if(myLoginDlg.m_passWord==1 && myLoginDlg.m_userName==2)//加入判断用户名密码是否正确
    {
    theApp.m_sUserName = myLoginDlg.m_userName;
    theApp.m_sPassWord = myLoginDlg.m_passWord;
    // myLoginDlg.DestroyWindow();
    isRight = FALSE;
    }

    }
    else 
    {
    isRight = FALSE;
    ::PostQuitMessage(0);
    // MessageBox(myLoginDlg.m_hWnd,"输入有误","err:",0);
    }

    }
      

  7.   

    BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_LBUTTONDOWN )
    {
    CRect rectOk,rectCel;
    m_btnOk.GetWindowRect(&rectOk);
    m_btnCancel.GetWindowRect(&rectCel);
    CPoint point;
    GetCursorPos(&point);
    if(rectOk.PtInRect(point))
    {
    UpdateData(TRUE);

    if(m_userName.IsEmpty() || m_passWord.IsEmpty())
    {
    MessageBox("用户名或密码不能为空");
    return FALSE;
    }
    m_times++;

    if(m_userName== "1" && m_passWord=="2")
    {
    theApp.m_sUserName = m_userName;
    theApp.m_sPassWord = m_passWord;
    CDialog::OnOK();
    }
    else
    {
    if(m_times == 3)
    {
    MessageBox("密码不正确已达3次,系统将自动退出!");
    CDialog::OnCancel();
    ::PostQuitMessage(0);
    }
    else
    {
    CString str ;
    str.Format("用户名或密码不正确,您还可以输入%d次!",3 - m_times);
    MessageBox(str);
    m_userName = "";
    m_passWord = "";
    UpdateData(FALSE);
    }
    }

    }
    if(rectCel.PtInRect(point))
    {
    ::PostQuitMessage(0);
    CDialog::OnCancel();
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    我重写了PreTranslateMessage(MSG* pMsg) 
    这个函数解决的。