您的位置:首页 > 其它

转关于使用月历控件时·时间不准确问题

2009-11-06 15:00 741 查看
vc6.0 GetCurSel()为什么得不到正确日期


悬赏分:15 - 解决时间:2009-9-4 11:13

在使用月历控件时,选择日期并将其显示出来,但显示的日期和选择的日期不一样,会差3,4年,为什么?要减去一个值才行。
CTime a;
CString t;
CMonthCalCtrl *mCtrl=(CMonthCalCtrl*)GetDlgItem(IDC_MONTHCALENDAR1);
mCtrl->GetCurSel(a);
CTime b(2011,7,2,0,0,0);
CTime c(2008,1,1,0,0,0);
m_SelectDay=a-(b-c);


问题补充:
我想知道为什么这个日期不准确,哪位给解释一下。

CTime a;
CString t;
CMonthCalCtrl *mCtrl=(CMonthCalCtrl*)GetDlgItem(IDC_MONTHCALENDAR1);
mCtrl->GetCurSel(a);
CTime b(2011,7,2,0,0,0);
CTime c(2008,1,1,0,0,0);
CTime time =a-(b-c);
t = time.Format("%Y 年%m月%d日");
AfxMessageBox(t);
对的啊

CTime operator +( CTimeSpan timeSpan ) const;

CTime operator -( CTimeSpan timeSpan ) const;

CTimeSpan operator -( CTime time ) const;

b和c都是CTime,所以它调用第三个-(CTimeSpan operator -( CTime time ) const;),所以它的返回值是CTimeSpan
a是CTime,第二个参数是CTimeSpan,所以调用第二个-(CTime operator -( CTimeSpan timeSpan ) const;)
b和c的时间差大约是两年多,你选择的时间减它,当然少了两了两年多

这是一个Bug
void CDlgDlg::OnButton1()
{
// CTime a;
CString t;
CMonthCalCtrl *mCtrl=(CMonthCalCtrl*)GetDlgItem(IDC_MONTHCALENDAR1);
// mCtrl->GetCurSel(a);

SYSTEMTIME   sysTime;
::SendMessage(mCtrl->GetSafeHwnd(),   MCM_GETCURSEL,   NULL,   (LPARAM)&sysTime);

// CTime time =a-(b-c);
t.Format("%d 年%d月%d日",sysTime.wYear,sysTime.wMonth,sysTime.wDay);
AfxMessageBox(t);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐