因为要显示的数据量很大,所以想一边产生数据,一边显示出来,这样可能会友好一些,哪位大虾有什么好的建议?
解决方案 »
- "MFC新手,求助各位大侠"MFC中如何选定绘制图形并且能够复制,剪切,粘贴,删除。
- TCP服务器接受一客户数据,转发问题?
- 关于程序未响应
- CInternetSession类使用PUT/GET的问题
- ########请问关于C/C++的一个网址,地址忘记了##########
- 如何动态修改CButton的风格(通过SetWindowLong)
- 怎么将MemDC中的图片放大或缩小到桌面上?
- 在线等。关于随机函数的问题。20分
- 请教高手如何根据文件名获得进程句柄杀死进程?
- 有谁用过OLE DB(非ATL,在WIN32 APPLICATION应用程序)开发数据库,能否提供源代码。
- how to interrupts the execution of an application so that it can process the message queue
- 如何作圆饼形统计数据?
m_list.SetItemCountEx(10000);
重载CListCtrl
映射
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
//{{AFX_MSG_MAP(CMyListCtrl)
ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
假设CMyListCtrl::m_Items是已经产生的数据的数组
这里把数据填到ListCtrl
void CMyListCtrl::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;int iItemIndx= pItem->iItem;if (pItem->mask & LVIF_TEXT) //valid text buffer?
{
//根据iItemIndx对ListCtrl设值
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;
}
}
BOOL CMyListCtrl::OnChildNotify( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult )
{
NMLVCACHEHINT* pcachehint=NULL;if (message == WM_NOTIFY)
{
NMHDR* phdr = (NMHDR*)lParam; switch(phdr->code)
{
case LVN_ODCACHEHINT:
pcachehint= (NMLVCACHEHINT*) phdr;
//这里根据pcachehint->iFrom和pcachehint->iTo更新m_Items数据
PrepCache(pcachehint->iFrom, pcachehint->iTo);
break;
default:
return CListCtrl::OnChildNotify(message, wParam, lParam, pLResult);
}
return FALSE;
}
else
return CListCtrl::OnChildNotify(message, wParam, lParam, pLResult);}