MFC ListCtrl如何查找某一行的上一行或者下一行
我有一个ListCtrl第一列用来显示日期时间,然后我在两个DateTimePicker分别输入日期、时间。如果条件相等的话可以查找到,但是我又想在不相等的情况下,查找L...
我有一个ListCtrl第一列用来显示日期时间,然后我在两个DateTimePicker分别输入日期、时间。如果条件相等的话可以查找到,但是我又想在不相等的情况下,查找ListCtrl最接近DateTimePicker的上一行或者下一行,要怎么实现?贴一段代码,望高手解答。
void CClientDlg::OnBnClickedSelect()
{
int i;
CTime stDate,stTime;
CString strDTime;
CString strItem1,strItem1Time1;
m_dtYMD.GetTime(stDate);
m_dtHMS.GetTime(stTime);
//获取DateTimePicker时间
strDTime.Format("%04d-%02d-%02d %02d:%02d",stDate.GetYear(),stDate.GetMonth(),stDate.GetDay(),stTime.GetHour(),stTime.GetMinute());
for(i = 0;i < m_lstDtf.GetItemCount();i++)
{
//获取ListCtrl第一列日期、时间
strItem1 = m_lstDtf.GetItemText(i,0);
strItem1Time1 = strItem1.Left(16);
if(strDTime == strItem1Time1)
{
m_lstDtf.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED|LVIS_FOCUSED);
m_lstDtf.SetFocus();
m_lstDtf.EnsureVisible(i,FALSE);
break;
}
}
//无此时间段视频,定位到相邻行,弹出消息对话框 ???
if(i == m_lstDtf.GetItemCount())
{
MessageBox("无此时间段视频",NULL,MB_OK|MB_ICONWARNING);
return;
}
}
假设我输入2014-10-24 8:30:00,但ListCtrl只有2014-10-24 8:10:00和2014-10-24 8:50:00,我想在2014-10-24 8:10:00或者2014-10-24 8:50:00处高亮显示 展开
void CClientDlg::OnBnClickedSelect()
{
int i;
CTime stDate,stTime;
CString strDTime;
CString strItem1,strItem1Time1;
m_dtYMD.GetTime(stDate);
m_dtHMS.GetTime(stTime);
//获取DateTimePicker时间
strDTime.Format("%04d-%02d-%02d %02d:%02d",stDate.GetYear(),stDate.GetMonth(),stDate.GetDay(),stTime.GetHour(),stTime.GetMinute());
for(i = 0;i < m_lstDtf.GetItemCount();i++)
{
//获取ListCtrl第一列日期、时间
strItem1 = m_lstDtf.GetItemText(i,0);
strItem1Time1 = strItem1.Left(16);
if(strDTime == strItem1Time1)
{
m_lstDtf.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED|LVIS_FOCUSED);
m_lstDtf.SetFocus();
m_lstDtf.EnsureVisible(i,FALSE);
break;
}
}
//无此时间段视频,定位到相邻行,弹出消息对话框 ???
if(i == m_lstDtf.GetItemCount())
{
MessageBox("无此时间段视频",NULL,MB_OK|MB_ICONWARNING);
return;
}
}
假设我输入2014-10-24 8:30:00,但ListCtrl只有2014-10-24 8:10:00和2014-10-24 8:50:00,我想在2014-10-24 8:10:00或者2014-10-24 8:50:00处高亮显示 展开
2个回答
展开全部
遍历列表,计算输入时间和列表项的时间差,找到时间差最小的那一项,并设置选中状态。
求时间差可以先将两个时间标准化,然后用MFC提供的类库来运算,例如:
COleDateTime m_tStartDateTime;
COleDateTime m_tEndDateTime ;
//赋值,此处省略
COleDateTimeSpan tMinute = m_tEndDateTime - m_tStartDateTime;
int iMinute = (int)tMinute.GetTotalMinutes();
//iMinute即为相差分钟数
更多追问追答
追问
你说的m_tStartDateTime和m_tEndDateTime哪个是DateTimePicker输入的,哪个是ListCtrl里面的
追答
无所谓,都一样
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询