Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C/C+;中打印带下划线的文本+;?_C++_Winapi - Fatal编程技术网

C++ 如何在C/C+;中打印带下划线的文本+;?

C++ 如何在C/C+;中打印带下划线的文本+;?,c++,winapi,C++,Winapi,我正在编写一个应用程序,想打印带下划线的文本。我做错了什么 我使用了C语言的“翻译”代码,通常在C语言中工作得很好,但是C++中没有。在我修复了错误之后,代码根本不起作用。它显示了一些正常情况下不会显示的字符。这是它打印的内容() 这是我使用的代码 auto DllHandler = GetStdHandle(-11); unsigned int Mode; GetConsoleMode(DllHandler,PDWORD(Mode)); Mode |= 4; SetConsoleMode(Dl

我正在编写一个应用程序,想打印带下划线的文本。我做错了什么

我使用了C语言的“翻译”代码,通常在C语言中工作得很好,但是C++中没有。在我修复了错误之后,代码根本不起作用。它显示了一些正常情况下不会显示的字符。这是它打印的内容()

这是我使用的代码

auto DllHandler = GetStdHandle(-11);
unsigned int Mode;
GetConsoleMode(DllHandler,PDWORD(Mode));
Mode |= 4;
SetConsoleMode(DllHandler,DWORD(Mode));
cout << "\x1b[5mUnderlined \x1b[0mtext" << endl;

提前感谢。

正如@RbMm所说,使用
ULONG
type可以成功编译并获得预期的结果

但造成错误的真正原因是指针传输错误。 如果要使用
unsigned int
,第一步是应用指针并为指针分配内存,然后在
GetConsoleMode
中强制进行类型转换

    auto DllHandler = GetStdHandle(-11);
    unsigned int *Mode = new unsigned int;
    GetConsoleMode(DllHandler, PDWORD(Mode));
    *Mode = *Mode | 4;
    SetConsoleMode(DllHandler, DWORD(*Mode));
    cout << "\x1b[4mUnderlined \x1b[4mtext" << endl;

    delete Mode;
auto-DllHandler=GetStdHandle(-11);
无符号整数*模式=新的无符号整数;
GetConsoleMode(DllHandler,PDWORD(模式));
*模式=*模式| 4;
SetConsoleMode(DllHandler,DWORD(*模式));

这主要取决于终端字体设置以及如何控制这些设置。Windows控制台真的支持ANSI转义序列吗?它在C#中工作似乎很奇怪。我想,
Console
对象可能会解释这些,以执行实际的API调用来更改控制台模式。使用
\x1b[4m
而不是
\x1b[5m
@Ruslan-是的,确实支持。不检查哪个版本,但支持-查找使用ESC的文本格式[m代码和4下划线添加下划线-因此需要使用
\x1b[4m
    auto DllHandler = GetStdHandle(-11);
    unsigned int *Mode = new unsigned int;
    GetConsoleMode(DllHandler, PDWORD(Mode));
    *Mode = *Mode | 4;
    SetConsoleMode(DllHandler, DWORD(*Mode));
    cout << "\x1b[4mUnderlined \x1b[4mtext" << endl;

    delete Mode;