MFC的listcontrol控件实现点击变⾊,并保持滚动条不变
本篇⽂章,实现了MFC的list control控件实现点击变蓝,并保持滚动条不变。
在之前代码:
file.Open("");//打开⽂件
滚动条变短是什么原因while( file.ReadString(szLine) )//读取并显⽰⽂件
{
}
file.close();//关闭⽂件
的基础上,填加了点击事件,实现点击变蓝,并且保持滚动条位置不变。
这个过程分两步:
(1)我们之前设想,通过重绘函数,对list控件的⾏的背景进⾏重绘,但是重绘之后⽆法刷新,不能实时显⽰,需要拖动滚动条对页⾯进⾏刷新,才能显⽰蓝⾊背景。
因此呢,我们⼜想,将导⼊数据的代码,直接放到⼀个函数 file_data_show() 中,通过点击函数 OnCli
ckListHistory() 调⽤,然后再函数中直接将list控件⾥的数据清空,然后再重新写⼊,此时刚好蓝条也出现了,代码如下:
m_list.DeleteAllItems();
file.Open();
while()
{
}
file.close();
⽽在点击事件中,我们是这样的
void History::OnClickListHistory(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.SubItemHitTest(&lvinfo);
OnCustomdrawListHistory(pNMHDR, pResult);
//LockWindowUpdate();
file_data_show();
*pResult = 0;
}
int iScrollPos = m_list.GetScrollPos(SB_VERT);
int iItemCount = m_list.GetItemCount();
int iRangLimit = m_list.GetScrollLimit(SB_VERT);
int iEnsureVisble = iScrollPos + (iItemCount - iRangLimit) - 1;
m_list.DeleteAllItems();
while( file.ReadString(szLine) )
{
}
m_list.EnsureVisible(iEnsureVisble, FALSE);
//关闭⽂件
file.Close();
神奇,实现了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。