CListCtrl 中添加控制進度條

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);//自動滾動

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章