我建立一List并且加载了数据库,现在我想当我查找数据库时,得到的结果能在list上加亮显示,这该怎么做,如何获得查找的结果在list的第几行,并加亮显示.
以前我是这样做的,先deleteallitems然后重新加载数据库,但这样做工作效率低,如果数据量较大的话,便会有明显的闪动,于是我想使用上面的构思,但我不知道怎么做,希望老师指导
以前我是这样做的,先deleteallitems然后重新加载数据库,但这样做工作效率低,如果数据量较大的话,便会有明显的闪动,于是我想使用上面的构思,但我不知道怎么做,希望老师指导
解决方案 »
- 【HELP】控件上画图无法填充颜色
- rar格式的文件传输问题
- 在vc环境下可以编译c++的文件吗,如何进行设置
- 请问在Debug文件夹中生成的.exe文件为什么不能在其他的电脑上运行呢?
- 用findwindow和findwindowex查找窗口是不是一定要先找到父窗口才能再找子窗口.能直接找子窗口啊?
- 原始套接口,为什么无法截获本机发出的包?
- gethostbyname 为何返回值是null
- 好消息!BCGControlBar Pro 6.2 和注册码都已搞定!
- cout 为什影响线程的执行
- CList 作参数怎么定义?
- 高分求救:用ATL跨进程组件(此组件主要用做界面)怎样实现回调?急!!!
- SetOutPutProps函数后内存累计增长不释放
在开发虚拟列表控件时应注意一些兼容性问题。有关更多信息,请参见 Platform SDK 中“列表-视图控件”主题的“兼容性问题”一节。处理 LVN_GETDISPINFO 通知
虚拟列表控件维护非常少的项信息。除了项选择和焦点信息,所有项信息都由控件的所有者管理。框架通过 LVN_GETDISPINFO 通知消息来请求信息。若要提供请求的信息,虚拟列表控件的所有者(或控件本身)必须处理该通知。使用“属性”窗口可以很容易地完成此操作(请参见将消息映射到函数)。所得到的代码应类似于下面的示例(其中 CMyListCtrl 是虚拟列表控件对象,控件正在处理通知)。BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo)
END_MESSAGE_MAP()
在 LVN_GETDISPINFO 通知消息的处理程序中,必须检查正在请求的信息的类型。可能值是: LVIF_TEXT 必须填写 pszText 成员。
LVIF_IMAGE 必须填写 iImage 成员。
LVIF_INDENT 必须填写 iIndent 成员。
LVIF_PARAM 必须填写 lParam 成员。
LVIF_STATE 必须填写 state 成员。
然后应将所有请求的信息提供给框架。下面的示例摘自列表控件 (List Control) 对象的通知处理程序体,它通过为文本缓冲区和项的图像提供信息来说明一种可能的方法:LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;int iItemIndx= pItem->iItem;if (pItem->mask & LVIF_TEXT) //valid text buffer?
{
switch(pItem->iSubItem){
case 0: //fill in main text
lstrcpy(pItem->pszText,
m_Items[iItemIndx].m_strItemText);
break;
case 1: //fill in sub item 1 text
lstrcpy(pItem->pszText,
m_Items[iItemIndx].m_strSubItem1Text);
break;
case 2: //fill in sub item 2 text
lstrcpy(pItem->pszText,
m_Items[iItemIndx].m_strSubItem2Text);
break;
}
}if pItem->mask & LVIF_IMAGE) //valid image?
pItem->iImage=
m_Items[iItemIndx].m_iImageIndex;
缓存和虚拟列表控件
由于这种类型的列表控件 (List Control) 是提供给大的数据集的,因此建议您缓存请求的项数据以提高检索性能。框架提供缓存提示机制,通过发送 LVN_ODCACHEHINT 通知消息来帮助优化缓存。但是,您必须使用一种稍有不同的方法来处理该通知。使用“属性”窗口,重写列表控件 (List Control) 对象的 OnChildNotify 函数。在该示例的情况下为 CMyListCtrl。在处理程序体中检查 LVN_ODCACHEHINT 消息,如果找到,则准备缓存。下面的示例(摘自 OnChildNotify 函数体)执行此检查并调用 CMyListCtrl 类的 PrepCache 成员函数。NMLVCACHEHINT* pcachehint=NULL;if (message == WM_NOTIFY)
{
NMHDR* phdr = (NMHDR*)lParam; switch(phdr->code)
{
case LVN_ODCACHEHINT:
pcachehint= (NMLVCACHEHINT*) phdr;
// Load the cache with the recommended range.
PrepCache(pcachehint->iFrom, pcachehint->iTo);
break;
default:
return CListCtrl::OnChildNotify(message, wParam, lParam, pLResult);
}
return FALSE;
}
else
return CListCtrl::OnChildNotify(message, wParam, lParam, pLResult);
注意,如果消息类型不是 LVN_ODCACHEHINT,则通知将传递给基类 (CListCtrl)。有关准备和维护缓存的更多信息,请参见 Platform SDK 中的“列表-视图控件”主题的“缓存管理”一节。查找特定的项
当需要查找特定的列表控件项时,虚拟列表控件发送 LVN_ODFINDITEM 通知消息。列表视图 (ListView) 控件接收快捷键访问或接收 LVM_FINDITEM 消息时发送该通知消息。搜索信息以 LVFINDINFO 结构的格式发送,该结构是 NMLVFINDITEM 结构的成员。通过重写列表控件 (List Control) 对象的 OnChildNotify 函数来处理该消息,并在处理程序体中检查 LVN_ODFINDITEM 消息。如果找到此消息,则执行相应的操作。您应该准备好搜索与列表视图 (ListView) 控件给定的信息匹配的项。如果成功,则应返回项的索引;如果没有找到匹配项,则返回 -1。
用ADO,只需要几行代码