void CMyView::OnLButtonDown(UINT nFlags, const CPoint& point)
{
CMyDlg Dlg(); if(Dlg.DoModal()==IDOK)
{
Dlg.UpdateData(FALSE); int version=Dlg.m_cmbVersion.GetCurSel()+1;
         }
}
其中,m_cmbVersion是Dlg中的一个组合框控件。编译链接都可以,运行时出错,是什么原因啊?
汗自己一个!

解决方案 »

  1.   

    DoModal一结束,对话框都已经销毁了,m_cmbVersion.GetCurSel()拿不出来了,UpdateData()也不行,应该放到里面去做这些操作,不要在DoModal之后
      

  2.   

    是哪,DoModal()==IDOK中只能取一些dlg中定义的成员变量。其实你只要在dlg中定义一个成员变量。int m_iVersion;然后生成dlg的IDOK消息的函数,将:
    Dlg.UpdateData(FALSE);
    m_iVersion=Dlg.m_cmbVersion.GetCurSel()+1;
    放在其中。
    然后:
    if(Dlg.DoModal()==IDOK)
       {
            int version=Dlg.m_iVersion;
       }
      

  3.   

    对话框在默认的OnOK虚函数中结束。可以在对话框中重载OnOK函数。
    void CMyDlg::OnOK()
    {
    if (!UpdateData(TRUE))
    return;
    m_nVersion = m_wndCombo.GetCurSel();
    EndDialog(IDOK);

    }m_nVersion是mydlg的一个公开int型变量。
    可以这样访问他:
    CMyDlg dlg;
             CString str;
    if(dlg.DoModal() == IDOK)
    {
               str.Format("%d", dlg.m_nVersion);
               AfxMessageBox(str);
    }