[英]Get the amount of lines outputted in a Win32 console?
我正在嘗試使用一些業余C編程來創建自己的函數來清除控制台輸出列。 我想在調用函數時獲取控制台輸出中的行數,以便我可以將光標移動到每行中的指定列,將該列上的空格重寫為空格,然后轉到下一行。 不幸的是,當它到達最后一行時我無法結束循環。
我應該如何獲得當前控制台輸出中的行數?
初始化事物需要幾個步驟,但提供您正在尋找的信息的調用是GetConsoleScreenBufferInfo 。
至少,您需要一個指向控制台的句柄 (文件描述符)。 您可以使用GetStdHandle執行此操作 ,例如,
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
假設你#include <Windows.h>
你可以這樣做:
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
GetConsoleScreenBufferInfo(console, &screen);
然后訪問尺寸就像輸入screen.dwSize.X
(width)和screen.dwSize.Y
(height)一樣簡單,但是這會產生一個問題, X
或Y
尺寸的大小不是緩沖區的大小被顯示。
所以在我的電腦上,如果我這樣做:
printf("X:%d - Y:%d\n", screen.dwSize.X, screen.dwSize.Y);
它顯示X:80 - Y:1000
當可見Y尺寸僅為25但我可以滾動1000的長度。
如何獲得當前可見的輸出大小我不確定,但這是一個清除整個屏幕緩沖區的函數:
void clearScreen(void) {
COORD topLeft = { 0, 0 };
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
DWORD written;
GetConsoleScreenBufferInfo(console, &screen);
FillConsoleOutputCharacterA(
console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
FillConsoleOutputAttribute(
console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
screen.dwSize.X * screen.dwSize.Y, topLeft, &written
);
SetConsoleCursorPosition(console, topLeft);
}
一個簡單的gotoxy函數用於光標控制:
void gotoxy(int x, int y){
COORD cursorPos = {x,y};
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(console, cursorPos);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.