0

system("color 1E")たとえば、できることはわかっていますが、それを行うことができる API 呼び出しがあるかどうかに興味があります。これはより高速であり、すべてのコンソールを同じように色付けする必要があるためcolorです。私が知っている唯一のAPI呼び出しですSetConsoleTextAttribute()が、これは使用後に書かれたテキストのみを着色しています。

4

3 に答える 3

5

cmd.exe を (Windows 7 で) デバッグしました。「color」コマンドの動作は次のとおりです。

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csBufferInfo;
GetConsoleScreenBufferInfo(hConsole, &csBufferInfo);
DWORD dwLength = csBufferInfo.dwSize.X * csBufferInfo.dwSize.Y;
COORD dwOrigin = { 0 };
DWORD dwWritten = 0;
FillConsoleOutputAttribute(hConsole, wAttribute, dwLength, dwOrigin, &dwWritten);
SetConsoleTextAttribute(hConsole, wAttribute);

wAttribute希望の色を保持する場所。

于 2012-06-01T17:38:17.703 に答える
1

WriteConsoleOutputAttributeを使用して、画面バッファー内の連続するセルに文字属性を書き込むことができます。これにより、既存のテキストを変更せずに、画面バッファー内の各セルの属性が変更されます。

#include <windows.h>

int main(int argc, char* argv[])
{
        CONSOLE_SCREEN_BUFFER_INFO sb;
        HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
        WORD attr = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE;
        COORD c = {0};
        int row, col;
        GetConsoleScreenBufferInfo(h, &sb);

        for(row = 0; row < sb.dwSize.Y; row++)
        {
                c.Y = row;
                for(col = 0; col < sb.dwSize.X; col++)
                {
                        c.X = col;
                        WriteConsoleOutputAttribute(h, &attr, 1, c, NULL);
                }
        }
}

SetConsoleTextAttribute()書かれた新しいテキストはまだ古い属性を使用しているため、 も使用する必要があることに注意してください。

于 2012-06-01T16:08:33.410 に答える
0

複数の情報源からこの回答をまとめました。基本的な考え方は

http://www.cplusplus.com/forum/beginner/5830/ .

ただし、system("cls") を使用します。

S, system("cls") をこちらのテクニックで置き換えてみました。http://support.microsoft.com/kb/99261

そして、結果はあなたが期待したものでした。

きれいに見えません。しかし、これは一つの答えだと思います。幸運を祈ります。

于 2012-06-01T16:07:09.660 に答える