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

新手上路,请多包涵

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

我知道您可以使用 Win32 API 的 SetConsoleTitle 函数,但它不需要字符串参数。

我需要这个,因为我正在做一个带有控制台效果和命令的 Java 本机界面项目。

我正在使用 Windows,它只需要与 Windows 兼容。

原文由 Markovian8261 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

 SetConsoleTitle(T("Some title"));

If you are using eg std::string things get a little more complicated, as you might have to convert between std::string and std::wstring depending on the UNICODE 宏。

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

 #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");

原文由 Some programmer dude 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Ivan Aksamentov - Drop 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题