环境:win2k pro, vc6.0 sp5
bug描述:
CMonthCalCtrl::GetCurSel函数的返回值是错误的。
测试代码:
//CMonthCalCtrl m_c; //定义在某处。
//当用户选择了不同的日期后
CTime t;
m_c.GetCurSel(t);
CString s = t.Format( "%A, %B %d, %Y" );
//之后s的值和用户选择的数值相去甚远。
bug跟踪:
通过简单的跟踪,发现问题出在控件本身对消息的响应上,在winctrl5.cpp中:
BOOL CMonthCalCtrl::GetCurSel(CTime& refTime) const
{
ASSERT(::IsWindow(m_hWnd));
// can't use this method on multiple selection controls
ASSERT(!(GetStyle() & MCS_MULTISELECT));
SYSTEMTIME sysTime;
BOOL bResult = (BOOL)
::SendMessage(m_hWnd, MCM_GETCURSEL, 0, (LPARAM) &sysTime);
//这个消息返回后,sysTime的wMinute和wSecond成员的数值是错误的。
if (bResult)
refTime = CTime(sysTime);
return bResult;
}
解决方法:自己发消息,然后修正sysTime的对应成员。