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