Cでプログラムを書いています。コンソールのテキストの色と背景の色を変更したいです。私のサンプルプログラムは-
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>
int main(int argc,char *argv[])
{
textcolor(25);
printf("\n \n \t This is dummy program for text color ");
getch();
return 0;
}
このプログラムをコンパイルすると、code :: blocksでエラーが発生します。textcolorは定義されていません。これはなぜですか?私はGNU GCCコンパイラとWindows Vistaで動作します。それが動作しない場合、textcolorの複製は何ですか。そのように、コンソールの背景色を変更したいです。同じエラーだけで関数の名前が異なります。コンソールとテキストの色を変更する方法。助けてください。
答えがC++であっても大丈夫です。
textcolorのような関数はturbo CやDev Cのような古いコンパイラで機能していました。今日のコンパイラでは、これらの関数は機能しません。 2つの関数SetColorとChangeConsoleToColorsを指定します。これらの関数のコードをコピーしてプログラムに貼り付け、次の手順を実行します。私が提供しているコードは、一部のコンパイラでは動作しません。
SetColorのコードは-
void SetColor(int ForgC)
{
Word wColor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//We use csbi for the wAttributes Word.
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//Mask out all but the background attribute, and add in the forgournd color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
return;
}
この関数を使用するには、プログラムから呼び出す必要があります。たとえば、私はあなたのサンプルプログラムを取っています-
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>
int main(void)
{
SetColor(4);
printf("\n \n \t This text is written in Red Color \n ");
getch();
return 0;
}
void SetColor(int ForgC)
{
Word wColor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//We use csbi for the wAttributes Word.
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//Mask out all but the background attribute, and add in the forgournd color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
return;
}
プログラムを実行すると、テキストの色が赤で表示されます。次に、各色のコードを示します-
Name | Value
|
Black | 0
Blue | 1
Green | 2
Cyan | 3
Red | 4
Magenta | 5
Brown | 6
Light Gray | 7
Dark Gray | 8
Light Blue | 9
Light Green | 10
Light Cyan | 11
Light Red | 12
Light Magenta| 13
Yellow | 14
White | 15
ここでChangeConsoleToColorsのコードを提供します。コードは-
void ClearConsoleToColors(int ForgC, int BackC)
{
Word wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = {0, 0};
//A return value... indicating how many chars were written
// not used but we need to capture this since it will be
// written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
SetConsoleTextAttribute(hStdOut, wColor);
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
}
return;
}
この関数では、2つの数値を渡します。通常の色が必要な場合は、最初の数字をゼロに、2番目の数字を色に設定します。私の例は-
#include <windows.h> //header file for windows
#include <stdio.h>
void ClearConsoleToColors(int ForgC, int BackC);
int main()
{
ClearConsoleToColors(0,15);
Sleep(1000);
return 0;
}
void ClearConsoleToColors(int ForgC, int BackC)
{
Word wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
//Get the handle to the current output buffer...
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
//This is used to reset the carat/cursor to the top left.
COORD coord = {0, 0};
//A return value... indicating how many chars were written
// not used but we need to capture this since it will be
// written anyway (passing NULL causes an access violation).
DWORD count;
//This is a structure containing all of the console info
// it is used here to find the size of the console.
CONSOLE_SCREEN_BUFFER_INFO csbi;
//Here we will set the current color
SetConsoleTextAttribute(hStdOut, wColor);
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//This fills the buffer with a given character (in this case 32=space).
FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);
FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
//This will set our cursor position for the next print statement.
SetConsoleCursorPosition(hStdOut, coord);
}
return;
}
この場合、最初の数値をゼロ、2番目の数値を15として、白のコードが15であるためコンソールの色が白になるようにしました。これはcode :: blocksで機能しています。それがあなたにも役立つことを願っています。
rlutil を使用することもできます。
rlutil.h
_)、setColor()
、cls()
、getch()
、gotoxy()
などを実装します。コードは次のようになります。
_#include <stdio.h>
#include "rlutil.h"
int main(int argc, char* argv[])
{
setColor(BLUE);
printf("\n \n \t This is dummy program for text color ");
getch();
return 0;
}
_
textcolor
関数は、最新のコンパイラではサポートされなくなりました。
これは、コードブロックでテキストの色を変更する最も簡単な方法です。 system
関数を使用できます。
テキストの色を変更するには:
#include<stdio.h>
#include<stdlib.h> //as system function is in the standard library
int main()
{
system("color 1"); //here 1 represents the text color
printf("This is dummy program for text color");
return 0;
}
テキストの色とコンソールの色の両方を変更する場合は、system
関数に別の色コードを追加するだけです
テキストの色とコンソールの色を変更するには:
system("color 41"); //here 4 represents the console color and 1 represents the text color
N.B:これらのようなカラーコードの間にスペースを使用しないでください
system("color 4 1");
ただし、コードブロックを使用すると、すべてのカラーコードが表示されます。このトリックを使用して、サポートされているすべてのカラーコードを知ることができます。
これはオンライン関数です。ヘッダーファイルを作成し、代わりにSetcolor();
を使用しています。これが役に立てば幸いです! 0〜256の範囲の任意の色を選択して、色を変更できます。 :)残念ながら、CodeBlocksにはwindow.hライブラリのビルドが後であると思います...
#include <windows.h> //This is the header file for windows.
#include <stdio.h> //C standard library header file
void SetColor(int ForgC);
int main()
{
printf("Test color"); //Here the text color is white
SetColor(30); //Function call to change the text color
printf("Test color"); //Now the text color is green
return 0;
}
void SetColor(int ForgC)
{
Word wColor;
//This handle is needed to get the current background attribute
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//csbi is used for wAttributes Word
if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
{
//To mask out all but the background attribute, and to add the color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut, wColor);
}
return;
}
簡単なアプローチ...
system("Color F0");
文字は背景色を表し、数字はテキストの色を表します。
0 =黒
1 =青
2 =緑
3 =アクア
4 =赤
5 =パープル
6 =黄色
7 =白
8 =グレー
9 =ライトブルー
A =ライトグリーン
B =ライトアクア
C =ライトレッド
D =ライトパープル
E =ライトイエロー
F =明るい白
system("COLOR 0A");
'
ここで、0Aは背景とフォントの色0の組み合わせです