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

C語言 Windows 控制台光標定位輸出:SetConsoleCursorPosition 實戰

     編輯:關於C語言

Windows 控制台光標定位輸出:摒棄 Turbo C,擁抱 Win32 API

使用 SetConsoleCursorPosition 實現座標定位輸出,構建動態進度條演示,展示控制台句柄、光標屬性、座標結構體的綜合應用。

核心 API 介紹

函數/結構體用途
GetStdHandle(STD_OUTPUT_HANDLE)獲取標準輸出句柄
COORD {X, Y}座標結構體,原點(0,0)左上角
SetConsoleCursorPosition(hOut, pos)設置光標位置
CONSOLE_CURSOR_INFO光標大小/可見性控制
SetConsoleTextAttribute設置文本顏色屬性
Sleep(ms)毫秒級延遲

完整演示代碼


#include 
#include 
#include 

int main() {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {0, 0};
    
    // 隱藏光標
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(hOut, &cci);
    cci.bVisible = FALSE;
    cci.dwSize = 1;
    SetConsoleCursorInfo(hOut, &cci);
    
    // 設置顏色:紅色前景 + 藍色背景 + 高亮
    SetConsoleTextAttribute(hOut, 0x0004 | 0x0008 | 0x8000);
    
    // 定位輸出
    pos.X = 5; pos.Y = 5;
    SetConsoleCursorPosition(hOut, pos);
    printf("我在這裡%2d%%", 0);
    
    // 動態進度條
    pos.X = 13; pos.Y = 5;
    for (int i = 0; i <= 100; i++) {
        SetConsoleCursorPosition(hOut, pos);
        printf("%2d%%", i);
        Sleep(500);
    }
    
    getch();
    return 0;
}

關鍵技術點

  1. 句柄機制:Windows 內核對象引用,所有控制台操作需句柄
  2. 座標系:字符單元格座標,非像素座標
  3. 光標控制:隱藏光標消除閃爍,提升視覺效果
  4. 顏色屬性:前景/背景色組合,0x8000 為高亮/加粗
  5. 動態刷新:同一位置重複輸出實現動畫效果

應用場景

  • 文本界面菜單/選單
  • 遊戲渲染(貪吃蛇、俄羅斯方塊)
  • 進度條/狀態監控
  • 表格化數據展示

跨平台提示

Linux/Unix 使用 ANSI 轉義序列或 ncurses 庫:


printf("\033[%d;%dH", row, col);  // ANSI 定位
// 或 ncurses: move(y, x);

掌握平台原生 API,是系統級工具開發的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved