c – 如何在code :: blocks中更改文本颜色和控制台颜色?

前端之家收集整理的这篇文章主要介绍了c – 如何在code :: blocks中更改文本颜色和控制台颜色?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在用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中,我也没关系.

解决方法

像textcolor这样的函数在turbo C和Dev C等旧编译器中运行.
在今天的编译器中,这些功能不起作用.我将提供两个函数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;
}

运行程序时,您将获得RED的文本颜色.现在我要给你每种颜色的代码

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,&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,coord);
 }
 return;
}

在这种情况下,我将第一个数字设置为零,第二个数字设置为15,因此控制台颜色将为白色,因为白色的代码为15.这对我来说是代码:: blocks.希望它也适合你.

猜你在找的C&C++相关文章