
InsertColumn(0,//插入位置
_T("名称"),//插入列名
LVCFMT_CENTER,//该列风格
55//列宽度
)
插入一项
InsertItem(0,//插入位置
"audiodg.exe"//插入项字符串
)
删除一项:
DeleteItem(n//项数
)
看个例子C/C++ code// The pointer to my list view control.
extern CListCtrl* pmyListCtrl
CString strText
int nColumnCount = pmyListCtrl->GetHeaderCtrl()->GetItemCount()
// Insert 10 items in the list view control.
for (int i=0i <10i++)
{
strText.Format(TEXT("item %d"), i)
// Insert the item, select every other item.
pmyListCtrl->InsertItem(
LVIF_TEXT|LVIF_STATE, i, strText,
(i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED,
0, 0)
// Initialize the text of the subitems.
for (int j=1j <nColumnCountj++)
{
strText.Format(TEXT("sub-item %d %d"), i, j)
pmyListCtrl->SetItemText(i, j, strText)
}
}
------解决方案--------------------
给你个例子。。。
m_list.InsertColumn(0,"Col 1")
m_list.InsertColumn(1,"Col 2")
m_list.InsertColumn(2,"Col 3")
m_list.InsertColumn(3,"Col 4")
m_list.InsertItem(0,"row1",0)
CString stemp =""
for(int i =0i<4i++)
{
stemp.Format("row 0 %d",i)
m_list.SetItemText(0,i,stemp)
}
m_list.InsertItem(0,"row befor prev",0)
m_list.InsertItem(2,"row after prev",0)
注意InsertItem的第一个参数
结果因该是这样的
row befor prev
row1 row01 row02 row03 row04
row after prev
1.使用SetRedraw禁止窗口重绘, *** 作完成后,再恢复窗口重绘m_ctlList.SetRedraw(FALSE)
//以下为更新数据 *** 作
//……
//恢复窗口重绘
m_ctlList.SetRedraw(TRUE)
2.使用LockWindowUpdate禁止窗口重绘, *** 作完成后,用UnlockWindowUpdate恢复窗口重绘
m_ctlList.LockWindowUpdate()
//以下为更新数据 *** 作
//……
//恢复窗口重绘
m_ctlList.UnlockWindowUpdate()
3.使用ListCtrl的内部双缓冲
m_ctlLisit.SetExtendedStyle(m_ctlLisit.GetExtendedStyle()|LVS_EX_DOUBLEBUFFER)
VC6未定义LVS_EX_DOUBLEBUFFER宏,使用者可以自定义,如下:
#define LVS_EX_DOUBLEBUFFER 0x00010000
4.Virtual List
首先要设置ListCtrl风格为LVS_REPORT | LVS_OWNERDATA或在ListCtrl属里中的More Styles页面中选中Owner data复选框。
其次要向应LVN_GETDISPINFO消息;
void OnGetdispinfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR
LV_ITEM *pItem = &(pDispInfo)->item
char szText[128] = {0}
if (pItem->mask &LVIF_TEXT)
{
//使缓冲区数据与表格子项对应
//m_ArrayBuff为二维数组
//定义如下 int m_ArrayBuff[2048][4]
_stprintf(szText,_T("%d"),m_ArrayBuff[pItem->iItem][pItem->iSubItem])
pItem->pszText = szText
}
*pResult = 0
}
最后便是生成缓冲区数据
void Insertdata()
{
//删除之前的数据
m_ctlList.SetItemCountEx(0)
m_ctlList.Invalidate()
m_ctlList.UpdateWindow()
srand( (unsigned)time( NULL ))
//生成新的数据缓冲区
int nItemCount = 2048
for (int i = 0i <nItemCounti ++)
{
for (int k = 0k <4k ++)
{
m_ArrayBuff[i][k] = rand()%2048 + 1
}
}
if (nItemCount <2)
m_ctlList.SetItemCountEx(1)
else
m_ctlList.SetItemCountEx(nItemCount)
m_ctlList.Invalidate()
}
若要修改数据,只要修改缓冲区m_ArrayBuff的数据即可以
5.Custom Redraw
既然是自绘,首先当然是重载CListCtrl类,并接管WM_ERASEBKGND消息,去掉默认的处理,改为不处理
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
//响应WM_ERASEBKGND消息
return false
//屏蔽默认处理
//return CListCtrl::OnEraseBkgnd(pDC)
}
void CListCtrlEx::OnPaint()
{
//响应WM_PAINT消息
CPaintDC dc(this)// device context for painting
CRect rect
CRect headerRect
CDC MenDC//内存ID表
CBitmap MemMap
GetClientRect(&rect)
GetDlgItem(0)->GetWindowRect(&headerRect)
MenDC.CreateCompatibleDC(&dc)
MemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height())
MenDC.SelectObject(&MemMap)
MenDC.FillSolidRect(&rect,RGB(228,236,243))
//这一句是调用默认的OnPaint(),把图形画在内存DC表上
DefWindowProc(WM_PAINT,(WPARAM)MenDC.m_hDC,(LPARAM)0)
//输出
dc.BitBlt(0,headerRect.Height(),rect.Width(), rect.Height(),&MenDC,0, headerRect.Height(),SRCCOPY)
MenDC.DeleteDC()
MemMap.DeleteObject()
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)