簡體   English   中英

C++ 控制台插入文本而不覆蓋

[英]C++ console insert text without overwriting

我有一個 C++ 函數可以被某個線程調用; 該函數將一行文本(使用ANSI )插入控制台,而不中斷當前用戶輸入。

這工作正常,直到到達控制台底部,用戶輸入被覆蓋,因為控制台不是自動滾動的,如下所示:

CLI 錯誤的屏幕截圖。

編碼:

void log_insert(std::string& line)
{
    static int num_of_lines = 1;

    // save horizontal cursor position
    std::cout << "\033[s";

    // insert <X> number of lines (\033[<X>L)
    std::cout << "\033[" << num_of_lines + 1 << "L";

    // move cursor to beginning
    std::cout << "\033[G";

    // print text
    std::cout << line << "\n";

    // restore horizontal cursor position
    std::cout << "\033[u";

    // move down <X> number of lines
    std::cout << "\033[" << num_of_lines + 1 << "B";
}

我知道有一些用於 CLI 的庫,但我認為這將是一個非常簡單的修復方法。 我曾嘗試使用 ANSI 滾動,但沒有任何運氣。

您可以通過使用以下方法將控制台光標設置為開頭來解決您的問題:

void setCursor(int x, int y) {
    HANDLE hOut;
    COORD position;

    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    position.X = x;
    position.Y = y;
    SetConsoleCursorPosition(hOut, position);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM