标题:SetConsoleTextAttribute的奇怪功能
只看楼主
我爱编程11
Rank: 2
等 级:论坛游民
帖 子:36
专家分:21
注 册:2017-12-17
结帖率:100%
已结贴  问题点数:20 回复次数:5 
SetConsoleTextAttribute的奇怪功能
我今天在用SetConsoleTextAttribute函数时把SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|144);
打成了SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY|1440);
后来的输出莫名其妙的出现了下划线,看下图。

SetConsoleTextAttribute不是调整字的颜色的吗,为何会有下划线?
有没有人可以解释一下?
搜索更多相关主题的帖子: 函数 出现 下划线 调整 颜色 
2018-01-01 12:59
我爱编程11
Rank: 2
等 级:论坛游民
帖 子:36
专家分:21
注 册:2017-12-17
得分:0 
注意看每个字的下面,
有人知道这是为什么呢?
2018-01-01 13:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
按照颜色定义格式每一位表示一种色状态,如:
蓝色 1 ............ 0b00000001     
绿色 2 ............ 0b00000010
红色 4 ............ 0b00000100
加强 8 ............ 0b00001000
蓝色背景 16 ....... 0b00010000
绿色背景 32 ....... 0b00100000
红色背景 64 ....... 0b01000000
背景色加强 128 .... 0b10000000

BACKGROUND_INTENSITY|1440 = 128|1440 = 1568 = 0b11000100000 = 1024|512|32
1024和512就不清楚是什么颜色状态,32是绿色背景。
2018-01-01 17:13
我爱编程11
Rank: 2
等 级:论坛游民
帖 子:36
专家分:21
注 册:2017-12-17
得分:0 
说错了,是上划线。
2018-01-01 17:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 4楼 我爱编程11
有下画线的,也有左线右线,还有个反相。

#include <stdio.h>
#include <windows.h>
main()
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    system("color 30");
    int i;
    for (i=256; i<0xFFFF; i*=2)
    {
        SetConsoleTextAttribute(hOut, 4|32|128|i);
        printf(" 绿色背景 + 背景加强 + %d \n", i);
        printf(" 绿色背景 + 背景加强 + %d \n", i);
        printf(" 绿色背景 + 背景加强 + %d \n", i);
    }
}
2018-01-01 21:13
nslookup65
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:24
专家分:192
注 册:2017-12-1
得分:10 
1440 = 0x5A0 = 0x20 + 0x80 + 0x100 + 0x400
1440: BACKGROUND_GREEN | BACKGROUND_INTENSITY | COMMON_LVB_LEADING_BYTE | COMMON_LVB_GRID_HORIZONTAL
程序代码:
//...
//
// Attributes flags:
//

#define FOREGROUND_BLUE      0x0001 // text color contains blue.
#define FOREGROUND_GREEN     0x0002 // text color contains green.
#define FOREGROUND_RED       0x0004 // text color contains red.
#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define BACKGROUND_BLUE      0x0010 // background color contains blue.
#define BACKGROUND_GREEN     0x0020 // background color contains green.
#define BACKGROUND_RED       0x0040 // background color contains red.
#define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
#define COMMON_LVB_LEADING_BYTE    0x0100 // Leading Byte of DBCS
#define COMMON_LVB_TRAILING_BYTE   0x0200 // Trailing Byte of DBCS
#define COMMON_LVB_GRID_HORIZONTAL 0x0400 // DBCS: Grid attribute: top horizontal.
#define COMMON_LVB_GRID_LVERTICAL  0x0800 // DBCS: Grid attribute: left vertical.
#define COMMON_LVB_GRID_RVERTICAL  0x1000 // DBCS: Grid attribute: right vertical.
#define COMMON_LVB_REVERSE_VIDEO   0x4000 // DBCS: Reverse fore/back ground attribute.
#define COMMON_LVB_UNDERSCORE      0x8000 // DBCS: Underscore.

#define COMMON_LVB_SBCSDBCS        0x0300 // SBCS or DBCS flag.
//...
2018-01-02 16:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483874-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013876 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved