0

我使用 MFC TextOut 在屏幕上放置一些文本,如下所示

std::string myIntToStr(int number)
{
    std::stringstream ss;//create a stringstream
    ss << number;//add number to the stream
    return ss.str();//return a string with the contents of the stream
}


void MViewClass::DrawFunction()
{
    CClientDC aDC(this);
    // .. Drawing Code
    aDC.TextOut(27, 50, ("my age is " + myIntToStr(23)).c_str());

}

但我收到错误消息“无法将参数 3 从 'const char *' 转换为 'const CString &'”。

TextOut 的文档显示了 CString 重载。我想将 CString 与 TextOut 一起使用,因为它允许我使用 myIntToStr 转换器。有什么建议么?

4

2 回答 2

1

该代码使用std::string'sc_str , which returnsconst char* , notCString`。尝试

void MViewClass::DrawFunction()
{
    CClientDC aDC(this);
    CString s("my age is ");
    s += myIntToStr(23).c_str();
    // .. Drawing Code
    aDC.TextOut(27, 50, s);
}

或者只使用CString::Format

void MViewClass::DrawFunction()
{
    CClientDC aDC(this);
    CString s;
    s.Format("my age is %d", 23);
    // .. Drawing Code
    aDC.TextOut(27, 50, s);
}
于 2014-08-26T20:39:53.450 回答
1

我假设您myIntToStr在代码的其他地方使用函数将 int 转换为字符串,并且您当前的问题是如何string使用 TextOut 显示 C++。

std::string您可以简单地在从该方式初始化的堆栈中创建一个 CString :

void MViewClass::DrawFunction()
{
    CClientDC aDC(this);
    // .. Drawing Code
    CString age(("my age is " + myIntToStr(23)).c_str());
    aDC.TextOut(27, 50, age);

}

由于它是在堆栈上创建的,它会在方法结束时自动消失,您不必担心分配和释放。

于 2014-08-26T22:07:03.193 回答