MFC讀寫.txt文件時進度條顯示實時進度


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

一、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文件時進度條顯示實時進度的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM