使用字符串在 C++ 中设置控制台标题

问题描述 投票:0回答:4

我想知道如何使用字符串作为新参数来更改 C++ 中的控制台标题。
我知道您可以使用 Win32 API 的

SetConsoleTitle
函数,但它不需要字符串参数。
我需要这个,因为我正在做一个带有控制台效果和命令的 Java 本机界面项目。
我使用的是 Windows,它只需要与 Windows 兼容即可。

c++ windows console java-native-interface title
4个回答
17
投票

SetConsoleTitle
函数确实接受字符串参数。只是字符串的kind取决于是否使用UNICODE。

您必须使用例如

T

 宏确保文字字符串的格式正确(宽字符或单字节):

SetConsoleTitle(T("Some title"));
如果您正在使用例如

std::string

 事情变得有点复杂,因为您可能需要根据 
std::string
 宏在 
std::wstring
UNICODE
 之间进行转换。

不必进行该转换的一种方法是,如果未定义

std::string

,则始终仅使用 
UNICODE
;如果已定义,则仅使用 
std::wstring
。这可以通过在 
typedef
 头文件中添加 
"stdafx.h"
 来完成:

#ifdef UNICODE typedef std::wstring tstring; #else typedef std::string tstring; #endif
如果您的问题是 

SetConsoleTitle

 不采用 
std::string
 (或 
std::wstring
),那是因为它必须与没有字符串类(或根本没有类)的 C 程序兼容。在这种情况下,您可以使用字符串类的 
c_str
 来获取指向要与需要旧式 C 字符串的函数一起使用的字符串的指针:

tstring title = T("Some title"); SetConsoleTitle(title.c_str());


还有另一种解决方案,那就是使用该函数的显式窄字符“ASCII”版本,其后缀为

A

SetConsoleTitleA("Some title");
当然还有一个宽字符变体,带有 

W

 后缀:

SetConsoleTitleW(L"Some title");
    

4
投票
string str(L"Console title"); SetConsoleTitle(str.c_str());
    

1
投票
评论是旧的,但你可以用系统方法做到...

#include <iostream> int main(){ system("title This is a title"); }
    

0
投票
这是使用

ANSI 转义代码的更通用方法:

std::cout << "\033]0;" << "MyTitle" << "\007";
在 Windows 上,您可能必须将控制台模式设置为 

ENABLE_VIRTUAL_TERMINAL_PROCESSING

(请参阅 
SetConsoleMode)。

© www.soinside.com 2019 - 2024. All rights reserved.