使用CString的MFC TextOut失败

MFC TextOut using CString fails

本文关键字:TextOut 失败 MFC CString 使用      更新时间:2023-10-16

我使用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从'constchar*'转换为'constCString&'"。

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

代码使用std::string's c_str , which returns const char*, not CString`。尝试

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);
}

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

您可以简单地在从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);
}

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