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

Windows 控制台圖形界面編程(六):光標位置與屬性完整控制

     編輯:關於C語言

在 Windows 控制台程式中,光標不僅標示輸入插入點,更可作為簡易繪圖的「畫筆」。本文系統介紹 SetConsoleCursorPosition、GetConsoleCursorInfo、SetConsoleCursorInfo 三大 API,並給出完整可編譯範例,助你實現光標任意定位、閃爍控制、大小調整等效果。

核心 API 速查表

API用途關鍵參數
SetConsoleCursorPosition設置光標坐標HANDLE hConsoleOutput, COORD dwCursorPosition
GetConsoleCursorInfo獲取光標屬性HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo
SetConsoleCursorInfo設置光標屬性HANDLE hConsoleOutput, const CONSOLE_CURSOR_INFO *lpConsoleCursorInfo

關鍵結構體定義

typedef struct _CONSOLE_CURSOR_INFO {
    DWORD dwSize;   // 光標高度佔字符單元百分比,1~100
    BOOL  bVisible; // TRUE=可見,FALSE=隱藏
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

完整範例:光標「隱身術」與「瞬間移動」

#include <windows.h>
#include <stdio.h>

int main(void) {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {0, 0};
    CONSOLE_CURSOR_INFO cursorInfo;

    // 1. 隱藏光標
    GetConsoleCursorInfo(hOut, &cursorInfo);
    cursorInfo.bVisible = FALSE;
    SetConsoleCursorInfo(hOut, &cursorInfo);
    printf("光標已隱藏,3 秒後恢復...\n");
    Sleep(3000);

    // 2. 恢復並放大光標
    cursorInfo.bVisible = TRUE;
    cursorInfo.dwSize = 50;  // 佔半個字符高
    SetConsoleCursorInfo(hOut, &cursorInfo);

    // 3. 光標跳躍演示
    for (int y = 0; y < 10; ++y) {
        pos.Y = y;
        pos.X = y * 2;
        SetConsoleCursorPosition(hOut, pos);
        printf("★");
        Sleep(200);
    }

    // 4. 歸位
    pos.X = 0; pos.Y = 12;
    SetConsoleCursorPosition(hOut, pos);
    printf("\n演示結束。\n");
    return 0;
}

常見坑點提示

  • 坐標原點:COORD 以字符單元為單位,(0,0) 為左上角,X 向右、Y 向下。
  • 緩衝區邊界:設置位置超出屏幕緩衝區範圍會失敗,需先用 GetConsoleScreenBufferInfo 確認 dwSize。
  • 光標大小:dwSize 為百分比,非像素;100 表示全塊光標(傳統 DOS 風格)。
  • 句柄有效性:重定向輸出時 STD_OUTPUT_HANDLE 可能無效,建議檢查返回值。

進階應用靈感

  • 文字動畫/進度條:隱藏光標 + 定位覆寫實現流暢動畫
  • 簡易遊戲:光標作為玩家/子彈圖形
  • 調試可視化:在特定座標輸出變量值,構建「儀表盤」
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved