VC控制台颜色设置分类:Windows编程2011-09-1910:393133人阅读评论(0)收藏举报通常控制台都是白字黑底的,千篇一律不免单调。适当的在控制台中加入一些彩色可以让人耳目一新,本文介绍如何使用系统API接口去修改控制台的文字和背景颜色。主要用到如下二个函数:得到standardinput,standardoutput,orstandarderror的设备句柄:HANDLEGetStdHandle(DWORDnStdHandle);参数有:STD_INPUT_HANDLE,STD_OUTPUT_HANDLE及STD_ERROR_HANDLE。传入STD_OUTPUT_HANDLE就可以得到控制台输出设备的句柄。设置控制台设备的属性BOOLSetConsoleTextAttribute(HANDLEhConsoleOutput,WORDwAttributes);第一个参数为控制台standardinput,standardoutput,orstandarderror的设备句柄第二个参数用来设备设备的属性,这里详细介绍下表示颜色的参数。先看下颜色的种类:在XP系统控制台一共有16种文字颜色,16种背景颜色,可以通过文字颜色+背景颜色*0x10来设置控制台的颜色。已经定义好的颜色常量如下:文字颜色使用如下组合:FOREGROUND_BLUE0x0001//textcolorcontainsblue.FOREGROUND_GREEN0x0002//textcolorcontainsgreen.FOREGROUND_RED0x0004//textcolorcontainsred.FOREGROUND_INTENSITY0x0008//textcolorisintensified.高亮颜色背景颜色使用如下组合(其实就是上面值*0x10):BACKGROUND_BLUE0x0010//backgroundcolorcontainsblue.BACKGROUND_GREEN0x0020//backgroundcolorcontainsgreen.BACKGROUND_RED0x0040//backgroundcolorcontainsred.BACKGROUND_INTENSITY0x0080//backgroundcolorisintensified.上面的颜色可以任意组合,如知道黄色可以由红色和绿色组成,所以可以用FOREGROUND_GREEN|FOREGROUND_RED来表示黄色的文字。默认情况下控制台的文字颜色是白色即用FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE也可以直接用7表示,背景颜色为黑色即用0表示。下面是已经封装好的函数[cpp]viewplaincopy1.//一共有16种文字颜色,16种背景颜色,组合有256种。传入的值应当小于2562.BOOLSetConsoleColor(WORDwAttributes)3.{4.HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);5.if(hConsole==INVALID_HANDLE_VALUE)6.returnFALSE;7.8.returnSetConsoleTextAttribute(hConsole,wAttributes);9.}使用范例:[cpp]viewplaincopy1.intmain()2.{3.printf(控制台下默认文字背景颜色:\n);4.printf(MoreWindows\n);5.printf(-----------------------------------\n\n);6.7.SetConsoleColor(FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE);8.printf(控制台下红字蓝底:\n);9.printf(MoreWindows\n);10.printf(-----------------------------------\n\n);11.12.SetConsoleColor(FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);13.printf(还原为控制台下默认文字背景颜色:\n);14.printf(MoreWindows\n);15.printf(-----------------------------------\n\n);16.return0;17.}输出结果如下:可以将本篇内容与VC在控制台下显示进度结合成来,完成一个随着任务完成百分比的增加,文字颜色不断变化的彩色进度显示。相信比单一的白色文字要美观的多。0.设置控制台输出行数和列数system(modecon:cols=100lines=20000);1.改变整个控制台的颜色用system(color0A);其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:0=黑色1=蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7=白色8=灰色9=淡蓝色A=淡绿色B=淡浅绿色C=淡红色D=淡紫色E=淡黄色F=亮白色2.改变下一个输出或者输入字体和背景的颜色采用SetConsoleTextAttribute函数,如WhiteonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);RedonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);GreenonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);YellowonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);BlueonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);MagentaonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);CyanonBlack:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);BlackonGray:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|BACKGROUND_INTENSITY);BlackonWhite:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);RedonWhite:SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|FOREGROUND_RED);等等。需要引入头文件:windows.h函数原型:BOOLSetConsoleTextAttribute(HANDLEhConsoleOutput,WORDwAttributes);wAttributes的取值含义对应如下:AttributeMeaningFOREGROUND_BLUETextcolorcontainsblue.FOREGROUND_GREENTextcolorcontainsgreen.FOREGROUND_REDTextcolorcontainsred.FOREGROUND_INTENSITYTextcolorisintensified.BACKGROUND_BLUEBackgroundcolorcontainsblue.BACKGROUND_GREENBackgroundcolorcontainsgreen.BACKGROUND_REDBackgroundcolorcontainsred.BACKGROUND_INTENSITYBackgroundcolorisintensified.COMMON_LVB_LEADING_BYTELeadingbyte.COMMON_LVB_TRAILING_BYTETrailingbyte.COMMON_LVB_GRID_HORIZONTALTophorizontal.COMMON_LVB_GRID_LVERTICALLeftvertical.COMMON_LVB_GRID_RVERTICALRightvertical.COMMON_LVB_REVERSE_VIDEOReverseforegroundandbackgroundattributes.COMMON_LVB_UNDERSCOREUnderscore.VC控制台应用程序颜色设置通常控制台都是白字黑底的,千篇一律不免单调。适当的在控制台中加入一些彩色可以让人耳目一新,本文介绍如何使用系统API接口去修改控制台的文字和背景颜色。主要用到如下二个函数:得到standardinput,standardoutput,orstandarderror的设备句柄:HANDLEGetStdHandle(DWORDnStdHandle);参数有:STD_INPUT_HANDLE,STD_OUTPUT_HANDLE及STD_ERROR_HANDLE。传入STD_OUTPUT_HANDLE就可以得到控制台输出设备的句柄。设置控制台设备的属性BOOLSetConsoleTextAttribute(HANDLEhConsoleOutput,WORDwAttributes);第一个参数为控制台standardinput,standardoutput,orstandarderror的设备句柄第二个参数用来设备设备的属性,这里详细介绍下表示颜色的参数。先看下颜色的种类:在XP系统控制台一共有16种文字颜色,16种背景颜色,可以通过文字颜色+背景颜色*0x10来设置控制台的颜色。已经定义好的颜色常量如下:文字颜色使用如下组合:FOREGROUND_BLUE0x0001//textcolorcontainsblue.FOREGROUND_GREEN0x0002//textcolorcontainsgreen.FOREGROUND_RED0x0004//textcolorcontainsred.FOREGROUND_INTENSITY0x0008//textcolorisintensified.高亮颜色背景颜色使用如下组合(其实就是上面值*0x1