c++ console application程序,可以修改单独字体颜色吗?还有控制光标位置。
修改修改颜色与背景色,不是调用system("coclor")这些命令行指令来实现。而且我需要控制光标上下左右...
修改修改颜色与背景色,不是调用system("coclor")这些命令行指令来实现。而且我需要控制光标上下左右
展开
1个回答
展开全部
利用SetConsoleTextAttribute函数可以改变控制台输出字体颜色。
没有做过控制光标,大概这样:
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y += 1;
以下是抄来的:
SetConsoleTextAttribute的用法我就不说了
很简单,MSDN上写得也很清楚
我仔细说明一下SetConsoleTextAttribute的第二个参数
它是一个WORD型的变量,其实就是一个unsigned shot型
范围为0~65535
当值超过它时自己会出警告
warning C4305: 'argument' : truncation from 'const int' to 'unsigned short'
编辑器将进行隐式类型转换,只取低十六位
具体我就不说了
具体说一下各种数不同颜色问题。
首先我们来写一段程序
printf("%d\n",FOREGROUND_BLUE);
printf("%d\n",FOREGROUND_GREEN);
printf("%d\n",FOREGROUND_RED);
printf("%d\n",FOREGROUND_INTENSITY);
printf("%d\n",BACKGROUND_BLUE);
printf("%d\n",BACKGROUND_GREEN);
printf("%d\n",BACKGROUND_RED);
printf("%d\n",BACKGROUND_INTENSITY);
通过输出,我们可以清楚地看到每个值对应的十进值数是多少
分别为1 2 4 8 16 32 64 128
即这个函数是靠一个字节的低四来控制前景色,高四位来控制背景色
低八位分别对应:
前景蓝,绿,红,高亮,背景蓝,绿,红,高亮。
我们可以通过或运算符来将这些属性叠加,即1到255都是我们控制之内的颜色。
到这里应该明白吧?
如果明白了我上面所说的,你可以接着往下看。
新的问题又出现了
我们知道低八位的每一个数都代表什么了,但高八位又都有什么意义呢?
即266到65535这些数又会显示出什么呢?
MSDN上是不会写这些的
怎么办?答案是靠我们自己。
我是这样来实验的
写以下程序:
#include <windows.h>
#include <winnt.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
int i=0;
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
for(i=1;i<65536;i*=2)
{
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
}
SetConsoleTextAttribute(consolehwnd,255);//因为最后一行被设为透明,为了使大家能够//看得更清楚,我将Press any key to continue设为一行白
return 0;
}
这样就可以清楚地看出每个位代表输出的格式
下面将十六位对应的输出总结如下:
0透明1前景蓝2前景绿3前景红4前景高亮5背景蓝6背景绿7背景红8背景高亮
9透明10透明11上划线12左划线13右划线14右划线15透明16透明
没有做过控制光标,大概这样:
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y += 1;
以下是抄来的:
SetConsoleTextAttribute的用法我就不说了
很简单,MSDN上写得也很清楚
我仔细说明一下SetConsoleTextAttribute的第二个参数
它是一个WORD型的变量,其实就是一个unsigned shot型
范围为0~65535
当值超过它时自己会出警告
warning C4305: 'argument' : truncation from 'const int' to 'unsigned short'
编辑器将进行隐式类型转换,只取低十六位
具体我就不说了
具体说一下各种数不同颜色问题。
首先我们来写一段程序
printf("%d\n",FOREGROUND_BLUE);
printf("%d\n",FOREGROUND_GREEN);
printf("%d\n",FOREGROUND_RED);
printf("%d\n",FOREGROUND_INTENSITY);
printf("%d\n",BACKGROUND_BLUE);
printf("%d\n",BACKGROUND_GREEN);
printf("%d\n",BACKGROUND_RED);
printf("%d\n",BACKGROUND_INTENSITY);
通过输出,我们可以清楚地看到每个值对应的十进值数是多少
分别为1 2 4 8 16 32 64 128
即这个函数是靠一个字节的低四来控制前景色,高四位来控制背景色
低八位分别对应:
前景蓝,绿,红,高亮,背景蓝,绿,红,高亮。
我们可以通过或运算符来将这些属性叠加,即1到255都是我们控制之内的颜色。
到这里应该明白吧?
如果明白了我上面所说的,你可以接着往下看。
新的问题又出现了
我们知道低八位的每一个数都代表什么了,但高八位又都有什么意义呢?
即266到65535这些数又会显示出什么呢?
MSDN上是不会写这些的
怎么办?答案是靠我们自己。
我是这样来实验的
写以下程序:
#include <windows.h>
#include <winnt.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
HANDLE consolehwnd;
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
int i=0;
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
for(i=1;i<65536;i*=2)
{
SetConsoleTextAttribute(consolehwnd,i);
printf("i am dadalili!\n");
}
SetConsoleTextAttribute(consolehwnd,255);//因为最后一行被设为透明,为了使大家能够//看得更清楚,我将Press any key to continue设为一行白
return 0;
}
这样就可以清楚地看出每个位代表输出的格式
下面将十六位对应的输出总结如下:
0透明1前景蓝2前景绿3前景红4前景高亮5背景蓝6背景绿7背景红8背景高亮
9透明10透明11上划线12左划线13右划线14右划线15透明16透明
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询