在使用Date Time Picker控件时需要响应日期改变的事件,这才发现如果是使用弹出的日期列表选中的时间,这个响应函数会进入两次。正纳闷中在CSDN搜索到这个问题的一个解法,很实用。通过这段代码也大概可以了解到为什么MFC会调用它两次了。
void CXXXOLEDlg::OnDatetimechangeDateFrom(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
static BOOL bOK=TRUE;
#if 1//判断是否有CMonthCalCtrl,若有会发送两次Change,截第二次即可
CDateTimeCtrl* pCtrl = (CDateTimeCtrl*) GetDlgItem(IDC_DATETIMEPICKER1);
ASSERT(pCtrl != NULL);
CMonthCalCtrl* pMoCalCtrl = pCtrl->GetMonthCalCtrl();
if(pMoCalCtrl != NULL)
bOK = !bOK;
#endif
if(bOK)
AfxMessageBox("");
}