Как изменить цвет текста и цвет консоли в code:: blocks?
Я пишу программы на c/" class="blnk">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;
}
когда я компилирую этот программный код:: blocks дает мне ошибку-textcolor не определен. Почему это так? Я работаю в компиляторе GNU GCC и Windows Vista. Если это не будет работать, что такое дубликат textcolor. Например, я хочу изменить цвет фона консоли. Компилятор дает мне ту же ошибку, что и имя функция другая. Как изменить цвет консоли и текста. Пожалуйста помочь.
Я в порядке, даже если ответ в C++.
6 ответов
функции как свойства textColor работал в старых компиляторах, таких как турбо с и Dev C. В современных компиляторах эти функции не работают. Я собираюсь дать две функции SetColor и ChangeConsoleToColors. Скопируйте код этих функций в программу и выполните следующие действия.Кода я даю не будет работать в некоторых случаях.
код SetColor is -
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;
}
в этой функции вы передаете два числа. Если вы хотите нормальные цвета, просто положите первое число равно нулю, а второе - цвету. Мой пример -
#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;
}
в этом случае я поставил первое число как ноль, а второе число как 15, поэтому цвет консоли будет белым, поскольку код для белого-15. Это работает для меня в Code:: blocks. Надеюсь, это сработает и для тебя.
вы также можете использовать rlutil:
- крест
- только заголовок (
rlutil.h
), - работает для C и c++,
- осуществляет
setColor()
,cls()
,getch()
,gotoxy()
, etc. - лицензия: WTFPL
ваш код станет чем-то вроде этого:
#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;
}
посмотреть пример.c и
Это функция онлайн, я создал с ней файл заголовка, и я использую Setcolor();
вместо этого, я надеюсь, что это помогло! Вы можете изменить цвет, выбрав любой цвет в диапазоне 0-256. :) К сожалению, я считаю, что CodeBlocks имеет более позднюю сборку окна.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 = Ярко-Белый
вы должны определить функцию textcolor раньше. Потому что textcolor не является стандартной функцией в C.
void textcolor(unsigned short color) {
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,color);
}