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处高亮显示
展开
 我来答
吹花PM
2014-10-24 · TA获得超过946个赞
知道小有建树答主
回答量:635
采纳率:0%
帮助的人:607万
展开全部

遍历列表,计算输入时间和列表项的时间差,找到时间差最小的那一项,并设置选中状态。

求时间差可以先将两个时间标准化,然后用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里面的
追答
无所谓,都一样
西纳德狂人
2014-10-24 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:110万
展开全部
我建议,用个结构体来保存Cstring key = 2014-10-24 8:10:00,__int64 value = 2014102481000

比较的时候用value
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式