动态创建CListCtrl可以使用虚拟列表技术吗?

1去23里 2016-04-14 10:36:59
问题1:
动态创建的CListCtrl控件, LVN_GETDISPINFO 消息没响应。
问题2:
CListCtrl动态创建的怎么设置 Owner Data属性。

以下为实现代码,请大神帮帮忙

一、消息映射
BEGIN_MESSAGE_MAP(CCListViewTestView, CListView)
ON_WM_CONTEXTMENU()
ON_WM_RBUTTONUP()
ON_NOTIFY(LVN_GETDISPINFO, 12345, &CCListViewTestView::GetDisplayed)
END_MESSAGE_MAP()

二、映射函数
void CCListViewTestView::GetDisplayed(NMHDR *pNMHDR, LRESULT *pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
LV_ITEM* pItem= &(pDispInfo)->item;

if (pItem == NULL)
return;
CString strTmp = _T("");
int iItemIndx= pItem->iItem;
if (pItem->mask & LVIF_TEXT) //字符串缓冲区有效
{
switch(pItem->iSubItem)
{
case 0:
{
strTmp.Format("%d", m_aryLstData[iItemIndx].dwcolIdx);
lstrcpy(pItem->pszText, strTmp);
strTmp = "";
}
break;
case 1:
{
strTmp.Format("%s", m_aryLstData[iItemIndx].chcolValue1);
lstrcpy(pItem->pszText, strTmp);
strTmp = "";
}
break;
case 2:
{
strTmp.Format("%s", m_aryLstData[iItemIndx].chcolValue2);
lstrcpy(pItem->pszText, strTmp);
strTmp = "";
}
break;
case 3:
{
strTmp.Format("%s", m_aryLstData[iItemIndx].chcolValue3);
lstrcpy(pItem->pszText, strTmp);
strTmp = "";
}
break;
}
}
*pResult = 0;
}

三、初始化
void CCListViewTestView::OnInitialUpdate()
{
CListView::OnInitialUpdate();

// Gain a reference to the list control itself.
CRect rect;
GetWindowRect(&rect); //整个 视区的 CRect;

m_listCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,
CRect(0,0,rect.right,rect.bottom), this, 12345);

m_listCtrl.InsertColumn(0,"标题一",LVCFMT_LEFT,100);
m_listCtrl.InsertColumn(1,"标题二",LVCFMT_LEFT,100);
m_listCtrl.InsertColumn(2,"标题三",LVCFMT_LEFT,160);

m_listCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER );

m_listCtrl.SetItemCountEx(100000, LVSICF_NOSCROLL|LVSICF_NOINVALIDATEALL);
//Invalidate必须加, 窗口失去焦点时, 不会实时显示数据
m_listCtrl.Invalidate();

m_aryLstData.clear();
DWORD dwAryTotalCount = 0;
for (DWORD dwAryIdx = 0; dwAryIdx < 100000; dwAryIdx++)
{
LST_DATA lstData;
lstData.dwcolIdx = dwAryIdx;
sprintf(lstData.chcolValue1, "%d", dwAryIdx);
sprintf(lstData.chcolValue2, "%d", dwAryIdx);
sprintf(lstData.chcolValue3, "%d", dwAryIdx);
m_aryLstData.push_back(lstData);
}

}
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2016-04-18
  • 打赏
  • 举报
回复

#define LVS_EX_DOUBLEBUFFER 0x00010000

BOOL CMyListCtrl::InitData(int count)
{//LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES | LVS_EX_LABELTIP);
	SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
	m_Total=count;
// insert all
	CString str;
	int jj;
	for(jj=0;jj<count;jj++)
	{
		str.Format("%d",jj);
		InsertColumn(jj,str,LVCFMT_CENTER,28);
		InsertItem(jj,"");
	}
// init data
	for(jj=0;jj<count;jj++)
	{
		str.Format("%d",jj);
		m_aStr.Add(str);
		for(int kk=1;kk<count;kk++) // not 0 !
		{
			str.Format("%d",(jj+kk)%2);
			m_aStr.Add(str);
		}
	}
	return TRUE;
}
初始化 // TODO: Add extra initialization here CRect rc; GetClientRect(rc); m_ListCtrlDyn.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT | LVS_OWNERDATA, rc, this, 12345); m_ListCtrlDyn.InitData(100); vc6 上 没问题
schlafenhamster 2016-04-18
  • 打赏
  • 举报
回复
m_listCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_OWNERDATA, CRect(0,0,rect.right,rect.bottom), this, 12345); 成功没有 ? void CMyListCtrl::OnGetdispinfo(NMHDR* pNMHDR, LRESULT* pResult)
1去23里 2016-04-17
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
是 LVS_OWNERDATA
m_listCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_OWNERDATA, CRect(0,0,rect.right,rect.bottom), this, 12345); 已经加入了,还是没有响应消息映射,请问还有可能是什么原因呢?
孤客天涯 2016-04-15
  • 打赏
  • 举报
回复
问题1:不响应是因为你没LVS_OWNERDATA属性 问题2: m_listCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT | LVS_OWNERDATA, CRect(0,0,rect.right,rect.bottom), this, 12345);
schlafenhamster 2016-04-15
  • 打赏
  • 举报
回复
是 LVS_OWNERDATA
1去23里 2016-04-15
  • 打赏
  • 举报
回复
引用 1 楼 孤客天涯的回复:
问题1:不响应是因为你没LVS_OWNERDATA属性 问题2: m_listCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT | LVS_OWNERDATA, CRect(0,0,rect.right,rect.bottom), this, 12345);
创建时加入了LVS_OWNERDATA属性,还是没响应,请问还有可能什么原因呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧