整體實現方式:先獲得檔案長度,然後用每次讀取的長度,計算出完成的百分比,用百分比的值設定進度條。

一、MFC進度條 Progress Control 相關函式

1. create() ——建立Progress Control
  針對不是通過資原始檔上拖拉進度條控制元件生成的進度條,需要用此函式建立一個。
2. SetRange() —— 設定進度條範圍
  設定進度條的起始值和終止值。(不管拖拽還是建立都要設定此,在初始化中)
3. SetPos() —— 設定當前值
  設定進度條的當前位置(值)。
4. OffSetPos() —— 偏移一段位置
  移動進度條一段距離(動態移動,如果不做延時,預設速度移動)
5. SetStep() —— 設定步長
  設定進度條偏移一次的長度,一般與StepIt搭配使用
6. StepIt() —— 更新步長位置
  按照步長來更新位置。
7.GetPos() —— 得到當前值
  獲得進度條當前值。

二、示例

  1. 首先在初始化函式中設定範圍和當前初始值

CProgressCtrl* pProg = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS);
pProg->SetRange(0, 100);
pProg->SetPos(0);

  2. 獲取目標txt檔案的總行數

while(!feof(fOpenFile)) {
if(fgets(szBuf, sizeof(szBuf) - 1, fOpenFile)) {
nRowOfTotalNum++;
}
}
nRowOfTotalNum++; fseek(fOpenFile, 0, SEEK_SET);

  這裡,讀取完總行數後,要將檔案指標指向檔案頭。

  3. 獲取當前讀取進度的行數,計算出完成的百分比,用百分比的值設定進度條。

fRowOfCurrentNum = nRowOfCurrentNum;
fRowOfTotalNum = nRowOfTotalNum;
fProPos = (fRowOfCurrentNum / fRowOfTotalNum) * 100.00;
nProPos = fProPos;
cProFileCtl.SetPos(nProPos);

  PS:SetPos()只能接受int型變數,而計算後的進度又要使用Float型別進行儲存計算,所以這裡要特別注意各個變數之間計算時的型別轉換問題,否則會一直出現Pos為0而進度條始終沒有反應的情況。

  最終即可完成讀寫.txt檔案時進度條顯示實時進度的功能。