环境: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的对应成员。
本文探讨了在Windows环境下使用Visual C++ 6.0时遇到的CMonthCalCtrl::GetCurSel函数返回错误的问题。该问题表现为函数返回的时间值与用户选择的时间不符,具体为分钟和秒数出现错误。文章提供了详细的bug复现步骤及修改建议。
4995

被折叠的 条评论
为什么被折叠?



