我在CMainFrame里实例化一个对话框的对象,想要获得对话框里DATETIMEPICKER控件当前选择的时间
代码如下
CMyDlg dlg;
CTime t;
CDateTimeCtrl *hw=(CDateTimeCtrl*)(dlg.GetDlgItem(IDC_DATETIMEPICKER1));
hw->GetTime(t);
运行到第三条语句时出错,错在GetDlgItem函数,这个错误怎么来的?

解决方案 »

  1.   

    你的对话框大概还没有创建吧?
    CMyDlg dlg;
    ^^^^^^^^^^^一般情况下,这条语句只是定义一个对话框的C++对象,并没有创建对话框。
    既然对话框没有创建,那么后面的dlg.GetDlgItem调用肯定出错。
    CTime t;
    CDateTimeCtrl *hw=(CDateTimeCtrl*)(dlg.GetDlgItem(IDC_DATETIMEPICKER1));
    hw->GetTime(t);然而,如果你在CMydlg dlg之后,调用dlg.DoModal()来创建模态对话框,之后再调用你的那条GetDlgItem语句,此时,模态对话框已经被销毁了,GetDlgItem也肯定出错。
    因此,你要在CMainFrame里面,简单地得到对话框中的时间,只能使用无模态对话框,比如:
    CMyDlg dlg;
    //    创建无模态对话框
    if (dlg.Create(dlg.IDD))
    {
        CTime t;
        CDateTimeCtrl *hw=(CDateTimeCtrl*)(dlg.GetDlgItem(IDC_DATETIMEPICKER1));
        hw->GetTime(t);
    }
    这个时候的对话框是无模态的。