1.添加私有变量
CArray<CProgressCtrl*,CProgressCtrl*> m_ProgressList;
int m_ProgressColumn;
2.重绘OnPaint()
int Top=GetTopIndex();
int Total=GetItemCount();
int PerPage=GetCountPerPage();
int LastItem=((Top+PerPage)>Total)?Total:Top+PerPage;
// if the count in the list os nut zero delete all the progress controls and them procede
{
int Count=(int)m_ProgressList.GetSize();
for(int i=0;i<Count;i++)
{
CProgressCtrl* pControl=m_ProgressList.GetAt(0);
pControl->DestroyWindow();
m_ProgressList.RemoveAt(0);
}
}
CHeaderCtrl* pHeader=GetHeaderCtrl();
for(int i=Top;i<LastItem;i++)
{
CRect ColRt;
pHeader->GetItemRect(m_ProgressColumn,&ColRt);
// get the rect
CRect rt;
GetItemRect(i,&rt,LVIR_LABEL);
rt.top+=1;
rt.bottom-=1;
rt.left+=ColRt.left;
int Width=ColRt.Width();
rt.right=rt.left+Width-4;
/*
rt.left=ColRt.left+1;
rt.right=ColRt.right-1;
*/
// create the progress control and set their position
CProgressCtrl* pControl=new CProgressCtrl();
pControl->Create(NULL,rt,this,IDC_PROGRESS_LIST+i);
CString Data=GetItemText(i,0);
int Percent=atoi(Data);
// set the position on the control
pControl->SetPos(Percent);
pControl->ShowWindow(SW_SHOWNORMAL);
// add them to the list
m_ProgressList.Add(pControl);
}
CListCtrl::OnPaint();
3.添加函数
InitProgressColumn(int ColNum)
{
m_ProgressColumn=ColNum;
}
设置那一列为进展条
4。
设置进展条颜色
m_progressctrl.SendMessage(PBM_SETBARCOLOR, 0, (LPARAM)RGB(255,0,0));//前景色
m_progressctrl.SendMessage(PBM_SETBKCOLOR, 0, (LPARAM)RGB(0, 200, 0)); //背景色
5。列表框自动滚动
m_List.SendMessage(WM_VSCROLL, MAKEWPARAM(SB_BOTTOM,0),0);//自动滚动