Ich habe es einfach "zu Fuß" gemacht, also ein "CTime m_datetime;" in den Header eingefügt und am Ende der betroffenen DoDataExchange() Funktion in etwa folgendes:
Code:
CMonthCalCtrl* pctrlDate = (CMonthCalCtrl*)GetDlgItem( IDC_DATE );
ASSERT( pctrlDate != 0 );
if ( pDX->m_bSaveAndValidate )
{
SYSTEMTIME sysDate = {0}, sysTime = {0};
BOOL bResult = pctrlDate->GetCurSel( &sysDate );
ASSERT( bResult ); // Besser: Exception werfen
// hier ggf. sysTime setzen
m_datetime = CTime( sysDate.wYear, sysDate.wMonth, sysDate.wDay,
sysTime.wHour, sysTime.wMinute, sysTime.wSecond );
}
else
{
pctrlDate->SetCurSel( m_datetime );
}
Dies läßt sich natürlich beliebig abändern, wichtig ist nur, daß man weder CMonthCalCtrl::GetCurSel(CTime& refDateTime) noch DDX_MonthCalCtrl() verwendet, weil die buggy sind. (DDX_MonthCalCtrl::GetCurSel(LPSYSTEMTIME pDateTime) ist hingegen ok.)
Liebe Grüße,
Axel
Lesezeichen