首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 6.0 打造經典旋轉等待動畫(Spinner)

     編輯:VC 教學

效果預覽

控制台輸出:Running ... [ - ] → Running ... [ \ ] → Running ... [ | ] → Running ... [ / ] 循環切換,彷彿一根木棍在旋轉。

核心類設計

#include 
using namespace std;

class Progress {
public:
    // iv: 動畫速度(每 iv 次 Do() 切換一幀)
    explicit Progress(int iv = 1) : intv(iv), cur(1), itmp(0) {}

    // 推進狀態機
    void Do() {
        if (++itmp > intv) {
            itmp = 0;
            cur = (cur % 4) + 1;  // 1→2→3→4→1
        }
    }

    // 輸出當前幀並回退游標
    void Show() const {
        switch (cur) {
            case 1: cout << '-'; break;
            case 2: cout << '\\'; break;
            case 3: cout << '|'; break;
            case 4: cout << '/'; break;
        }
        cout << '\b';  // 關鍵:退格覆蓋上一字元
    }

private:
    int cur;    // 當前幀 1~4
    int intv;   // 速度分母
    int itmp;   // 計數器
};

主程式範例

int main() {
    Progress prg(20);  // 每 20 次循環換一幀
    cout << "Running ... [ ";
    while (true) {
        prg.Do();
        prg.Show();
        // 實際專案中這裡替換為真實任務邏輯
        // Sleep(10); // 可選:控制整體刷新頻率
    }
    return 0;
}

關鍵技術點解析

  • 退格符 \b:不換行覆蓋同一位置,形成動畫視覺;
  • 速度解耦:intv 控制幀率,適應不同耗時任務;
  • 狀態機極簡:4 狀態循環,零記憶體壓力;
  • 跨平台潛力:純標準 C++,僅依賴 iostream,易移植至 Linux/macOS 終端。

擴展建議

  • 加入百分比顯示:cout << "\rProgress: " << pct << "% [" << spinner << "]";
  • 支援多執行緒:用 atomic 保護 cur 或改為無鎖環狀陣列;
  • 整合進 MFC:將 Show() 改寫為 CWnd::SetWindowText 更新靜態文字控件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved