簡體   English   中英

Windows命令提示符中的彩色文本一行

[英]colored text in windows command prompt in one line

我想在Windows命令提示符中更改特定單詞的顏色,它的工作方式就很好了:

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

string setcolor(unsigned short color){
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon, color);
    return "";
}

int main(int argc, char** argv)
{
    setcolor(13);
    cout << "Hello ";
    setcolor(11);
    cout << "World!" << endl;
    setcolor(7);
    system("PAUSE");
    return 0;
}

但是我希望我的功能像這樣

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

string setcolor(unsigned short color){
    HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hcon, color);
    return "";
}

int main(int argc, char** argv)
{
    cout << setcolor(13) << "Hello " << setcolor(50) << "World!" << setcolor(7) << endl;
    system("PAUSE");
    return 0;
}

當我運行它時,只有setcolor(13)起作用,然后顏色永遠都不會改變,直到結束,我該怎么做才能解決此問題

我的評論可能是錯誤的,使用I / O機械手(例如std::setw和family) 可能是可能的:

struct setcolor
{
    int color;
    setcolor(int c) : color(c) {}
    std::ostream& operator()(std::ostream& os)
    {
        HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(hcon, color);
        return os;
    }
};

像以前一樣使用它:

std::cout << "Hello " << setcolor(50) << "world\n";

注意:我不知道這是否行得通,因為我還沒有測試過。


現在,您當前代碼的問題(如問題所示)是setcolor是一個正常函數,該函數返回一個字符串,您只需調用這些函數並打印它們的返回值(空字符串)即可。

您需要將輸出放入單獨的函數中:

void WriteInColor(unsigned short color, string outputString)
{
   HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hcon, color);
   cout << outputString;
}

然后你可以打電話

int main(int argc, char** argv)
{
   WriteInColor(13, "Hello");
   WriteInColor(50, "World");
   WriteInColor(7, "\r\n");
}

仍然不是一個班輪,但比您的第一個選擇更干凈:)

暫無
暫無

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

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