Visual c++ MFC中的日期验证

Visual c++ MFC中的日期验证,visual-c++,mfc,Visual C++,Mfc,我有两个日期时间选择器控件,分别用于“开始日期”和“截止日期”。我想将截止日期的开始日期限制为起始日期 示例:如果起始日期为2013年4月12日 截止日期选择器应允许用户仅选择从2013年4月12日到当前日期的日期 DoDataExchange()方法中的代码如下所示 无论何时更改起始日期,它都不会反映“截止日期选择器”中的可能日期 如何将其限制为起始日期的开始日期?对话框数据验证不是这样工作的。您只能指定一个(静态)范围,并且例程将验证您的值是否在该预定义范围内。但是,您可以使用自己的验证例程

我有两个日期时间选择器控件,分别用于“开始日期”和“截止日期”。我想将截止日期的开始日期限制为起始日期

示例:如果起始日期为2013年4月12日 截止日期选择器应允许用户仅选择从2013年4月12日到当前日期的日期

DoDataExchange()方法中的代码如下所示

无论何时更改起始日期,它都不会反映“截止日期选择器”中的可能日期


如何将其限制为起始日期的开始日期?

对话框数据验证不是这样工作的。您只能指定一个(静态)范围,并且例程将验证您的值是否在该预定义范围内。但是,您可以使用自己的验证例程扩展此机制

下面的示例函数接受两个变量和一个范围,并确保

void AFXAPI DDV_MinMaxDates(
   CDataExchange* pDX,
   COleDateTime& fromValue, COleDateTime& toValue,
   const COleDateTime* refMinRange, const COleDateTime* refMaxRange)
{
  if(fromValue > toValue ||
     fromValue < refMinRange || fromValue > refMaxRange ||
     toValue < refMinRange || toValue > refMaxRange)
  {
     AfxMessageBox(_T("Incorrect interval!"));
     pDX->Fail();
  }
}

如果希望
CDateTimeCtrl
控件根据两个控件中的当前输入动态更改允许的范围,则可以使用
CDateTimeCtrl::SetRange
。要在每次更改一个控件时调用
SetRange
,您应该处理发送给父控件的
DTN\u DATETIMECHANGE
通知。

m\u daysStartDateVal和m\u daysSendDateVal的类型是什么?当“const COleDateTime*”时,为什么要传递“&m\u daysStartDateVal.getticCount()”是必需的?请调整您的问题,以便更清楚地表明您希望CDATETIMECRL动态更改行为,而不仅仅是DDV_u2;调用。(至少你对马吕斯答案的评论似乎是这样的。)我也这样做来验证(信息框)。但是我想在不使用消息框的情况下,在日期选择器控件(日历类型)上动态地限制它。同样的检查也可以通过DDV_MinMaxDateTime完成。唯一的区别是您可以提供更好的错误消息。非常感谢。我是MFC的新手,所以我正在努力完成工作。
void AFXAPI DDV_MinMaxDates(
   CDataExchange* pDX,
   COleDateTime& fromValue, COleDateTime& toValue,
   const COleDateTime* refMinRange, const COleDateTime* refMaxRange)
{
  if(fromValue > toValue ||
     fromValue < refMinRange || fromValue > refMaxRange ||
     toValue < refMinRange || toValue > refMaxRange)
  {
     AfxMessageBox(_T("Incorrect interval!"));
     pDX->Fail();
  }
}
DDV_MinMaxDates(pDX, m_daysStartDateVal, m_daysEndDateVal, &StartDate,&COleDateTime::GetCurrentTime());