代码如下:
void CAccuChekDlg::OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
//DWORD dwResult =m_starttime.GetTime(startm);
    //strstartDate=startm.Format("%Y-%m-%d %H:%M:%S %W-%A");
//if (dwResult == GDT_VALID)
//{
// strstartDate=endtm.Format(_T("%Y-%m-%d"));
//}
//UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。
CDateTimeCtrl* pDT =(CDateTimeCtrl*) GetDlgItem(IDC_DATETIMEPICKER1); 
assert(pDT);
if(pDT)
{
pDT->GetTime(startm); 
}
strstartDate= startm.Format(_T("%Y-%m-%d")); 

*pResult = 0;
}譬如我在弹出的日历框中选择的是2013-7-3,通过上述代码strstartDate转换后的时间确实“2013-08-15”
并且这个时间具有随机性,还曾出现“2004-05-17”等奇怪的时间,不明就里
只要用gettime和ctime.format()就会出现这个问题
并且DTN_DATETIMECHANGE具有两次消息响应的特点,第一次就能够获取值,第二次没有变化。
两次执行完后,变会看到非常讨厌的请问大家,对于获取datetimepicker控件中的日期的改变,有没简单有效的方法?

解决方案 »

  1.   

    我都是 DDX_DateTimeCtrl 关联控件和变量 读取的时候UpdateData一下
      

  2.   


    因为习惯上加CHANGE类型的触发事件
    按照你的说法,我先给控件关联CTime变量
    UpdateData(TRUE);
    strstartDate=startm.Format(_T("%Y-%m-%d"));
    strendDate=endtm.Format(_T("%Y-%m-%d"));
    结果strstartDate,strendDate为空;另外又试了下给控件关联CDateTimeCtrl类型
    UpdateData(TRUE);
    m_starttime.GetTime(startm);
    m_endtime.GetTime(endtm);
    strstartDate=startm.Format(_T("%Y-%m-%d"));
    strendDate=endtm.Format(_T("%Y-%m-%d"));
    执行第一个GetTime的时候,就出现上面的错误,郁闷啊,弄了一天了