MFC TextOut с использованием CString не удается

Я использую 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. Какие-либо предложения?

0

Решение

Код использует 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);
}
1

Другие решения

Я предполагаю, что вы используете функцию myIntToStr преобразовать int в строку в другом месте вашего кода, и что ваша текущая проблема заключается в том, как отобразить C ++ string с TextOut.

Вы можете просто создать CString в стеке, инициализированном из std::string сюда :

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

}

Поскольку он создается в стеке, он автоматически исчезнет в конце метода, и вы не будете беспокоиться о распределении и освобождении.

1

По вопросам рекламы [email protected]