搜索
查看: 1751|回复: 3
打印 上一主题 下一主题

[原创] 分享一个可以在《啊哈C》里面吧单句变颜色的代码

[复制链接]
跳转到指定楼层
楼主
发表于 2014-1-24 16:57:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

提供者:梦境传说
从群里看到的
  1. #include <stdio.h>
  2. #include <Windows.h>
  3. int main() {
  4. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
  5. SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
  6. printf("把这句话颜色变成红色\n");
  7. SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
  8. printf("把这句话颜色变成黄色\n");
  9. }
复制代码



评分

参与人数 1啊哈币 +5 收起 理由
李掌柜 + 5 赞一个!

查看全部评分

沙发
发表于 2014-1-26 13:15:03 | 只看该作者
本帖最后由 981013 于 2014-1-26 13:19 编辑

  1. BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput,WORD wAttributes);
复制代码
第一个参数就是用GetStdHandle(HANDLE GetStdHandle(DWORD nStdHandle);参数有:STD_INPUT_HANDLE(输入),STD_OUTPUT_HANDLE(输出)及STD_ERROR_HANDLE(错误)。)取到的设备句柄,第二个参数用来设置设备的属性。
在XP系统 控制台一共有16种文字颜色,16种背景颜色,可以通过:文字颜色 + 背景颜色 * 0x10 来设置控制台的颜色。
已经定义好的颜色常量如下:
文字颜色使用如下组合:
FOREGROUND_BLUE      0x0001  
FOREGROUND_GREEN     0x0002
FOREGROUND_RED       0x0004
FOREGROUND_INTENSITY 0x0008
背景颜色使用如下组合(其实就是上面值*0x10):
BACKGROUND_BLUE      0x0010
BACKGROUND_GREEN    0x0020
BACKGROUND_RED       0x0040
BACKGROUND_INTENSITY 0x0080
上面的颜色可以任意组合,如知道黄色可以由红色和绿色组成,所以可以用FOREGROUND_GREEN | FOREGROUND_RED来表示黄色的文字。

默认情况下控制台的文字颜色是白色即用FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE也可以直接用7表示,背景颜色为黑色即用0表示。

下面是已经封装好的函数:
  1. BOOL SetConsoleColor(WORD wAttributes)
  2. {
  3. HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  4. if (hConsole == INVALID_HANDLE_VALUE)
  5. return FALSE;

  6. return SetConsoleTextAttribute(hConsole, wAttributes);
  7. }
复制代码

资料来自互联网搜索结果

评分

参与人数 1啊哈币 +3 收起 理由
李掌柜 + 3 神马都是浮云

查看全部评分

板凳
发表于 2014-1-30 14:56:01 | 只看该作者
{:soso_e179:}赞一个
地板
发表于 2015-2-2 09:14:22 | 只看该作者
改了下,为什么不行了???
代码:[mw_shl_code=c,true]#include <stdio.h>
#include <windows.h>

        void moshu()
        {
                printf("\n");
                HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
                SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED);
                printf("把这句话颜色变成红色\n");
                system("pause");
                SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
                printf("把这句话颜色变成黄色\n");
                system("pause");
        }

int main()
{

        char a;
        printf("今天我要给大家变一个魔术,请看:\n");
        system("pause");
        printf("下面魔术即将开始……\n");
        system("pause");
        printf("下面,我将会把下面的字变颜色……\n");
        printf("大家信不信(Y/N)?");
        scanf("%c",&a);
        if(a=='Y' || a=='y')
        {
                printf("好了,你到底看不看了?(Y/N)?");
                scanf("%c",&a);
                if(a=='Y' || a=='y')
                {
                moshu();

                }
                else
                {        return;  }
        }
        else
        {
                printf("好!你敢不信!(咬牙切齿中……)我现在就给你变!");
                Sleep(3000);
                moshu();

        }
        system("pause");
        return 0;

}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表