CMonthCalCtrl的一个BUG

环境: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的对应成员。

 

你可能感兴趣的:(c,测试)