3

我想知道如何使用字符串作为新参数来更改 C++ 中的控制台标题。
我知道您可以使用SetConsoleTitleWin32 API 的功能,但它不带字符串参数。
我需要这个,因为我正在做一个带有控制台效果和命令的 Java 本机界面项目。
我正在使用 Windows,它只需要与 Windows 兼容。

4

3 回答 3

15

SetConsoleTitle函数确实接受了一个字符串参数。只是字符串的种类取决于是否使用UNICODE。

您必须使用例如T宏来确保文字字符串的格式正确(宽字符或单字节):

SetConsoleTitle(T("Some title"));

如果您正在使用例如std::string,事情会变得更复杂一些,因为您可能必须在宏之间进行转换std::stringstd::wstring具体取决于UNICODE宏。

不必进行该转换的一种方法是始终仅std::stringUNICODE未定义时使用,或者仅std::wstring在已定义时使用。这可以通过typedef"stdafx.h"头文件中添加一个来完成:

#ifdef UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

如果您的问题是SetConsoleTitle不需要std::string(or 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");
于 2012-11-04T14:05:45.590 回答
4
string str(L"Console title");
SetConsoleTitle(str.c_str());
于 2012-11-04T14:05:28.260 回答
1

评论很旧,但你可以用系统方法来做......

#include <iostream>

int main(){
    system("title This is a title");
}
于 2021-05-01T21:28:54.577 回答