【问题标题】:Set console title in C++ using a string使用字符串在 C++ 中设置控制台标题
【发布时间】:2012-11-04 14:00:20
【问题描述】:

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

【问题讨论】:

  • SetConsoleTitle 接受字符串
  • 先google一下你的问题,这个很容易找到...

标签: c++ windows console java-native-interface title


【解决方案1】:

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

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

SetConsoleTitle(T("Some title"));

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

不必进行这种转换的一种方法是,如果未定义 UNICODE,则始终仅使用 std::string,如果已定义,则仅使用 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");

【讨论】:

  • 请注意,如果字符大小错误,则不需要显式转换字符串,只需显式调用相应版本的函数即可。在这种情况下,您可以调用 SetConsoleTitleA(用于 ANSI 字符串)或 SetConsoleTitleW(用于 Unicode 字符串)。
  • 技术上,你应该使用UNICODETEXT()而不是_UNICODE_T()。前者是 Win32 宏,SetConsoleTitle() 是 Win32 函数。后者是 C 运行时宏,只能与 C 运行时函数一起使用。 在实践中UNICODE_UNICODE 通常是一起定义的,因此TCHAR/_TCHARTEXT()/_T() 是可以互换的。但我发现最好对正在使用的任何库使用正确的宏。附带说明一下,您的 typedef 可以简化为 typedef std::basic_string<_TCHAR> tstring;,不需要 #ifdef
【解决方案2】:
string str(L"Console title");
SetConsoleTitle(str.c_str());

【讨论】:

    【解决方案3】:

    评论是旧的,但你可以用系统方法...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多