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;