Как преобразовать двойное значение в строку, чтобы вывести его в строку заголовка окна под Win32

Возможный дубликат:
Как я могу преобразовать двойной в строку в C ++?
Конвертировать double в строку C ++?

Тотальный С ++ и Win32 нуб здесь играют в Visual Studio 2012, так что терпите меня, потому что я иногда откусываю больше, чем могу пережевывать 🙂

У меня есть приложение Win32, которое просто настраивает окно, используя цикл peekmessage для обновления в реальном времени. Приложение работает нормально, и окно показывает нормально. Я хотел бы напечатать текст в строке заголовка окна, отображая количество кадров в секунду из класса часов / таймеров, который мне предоставили.

Я еще не выучил GDI / GDI + или Direct2D & DirectWrite для вывода текста и значений переменных в клиентскую область, поэтому сейчас мне нужен простой метод вывода некоторой базовой статистики в окно, и я подумал, что самый простой способ — обновить заголовок окна на этом этапе. Мой класс окна имеет метод SetTitle, который принимает std :: wstring, поэтому мне было интересно, как лучше построить строку из литерального текста и значений переменных, таких как double? Как вы можете догадаться, я также незнаком со строками, выходящими за рамки стандартного std: cout для консольных приложений.

Амазонка говорит мне мой святой «Книга Петцольда, 5-е издание» до 3 дней, поэтому любые советы будут с благодарностью, и вы попадете в мой список рождественских открыток в этом году.

Благодарю.

0

Решение

И для эффективности и для удобства выделенный StringWriter класс предпочтительнее.

Например, с манжеты,

template< class Type >
static wstring stringFrom( Type const& o )
{
wostringstream stream;

stream << o;
return stream.str();
}

class StringWriter
{
wstring s_;

static wstring const& fastStringFrom( wstring const& s )
{ return s; }

static wchar_t const* fastStringFrom( wchar_t const* s )
{ return s; }

template< class Type >
static wstring fastStringFrom( Type const& o )
{
return stringFrom( o );
}

public:
template< class Type >
StringWriter& operator<<( Type const& o )
{
s_ += fastStringFrom( o );
return *this;
}

operator wstring const& () const { return s_; }
operator wchar_t const* () const { return s_.c_str(); }
};

Тогда используйте как

typedef StringWriter S;
foo( S() << L"pi = " << 3.14 );

Отказ от ответственности: код не тронут руками компилятора.

0

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

После того, как я уселся и углубился в поток ввода и вывода, я наконец нашел решение, которое, кажется, работает хорошо.

После включения <sstream> в моем проекте я создал std::wstringstream myString; объект.

В цикле реального времени моего приложения у меня был следующий код для форматирования строки и значения, поступающего из класса Clock, который я затем передал в GDI для распечатки в клиентскую область окна:

  myString.clear(); // clear status bits
myString.str(L""); // Clear the string for reuse
myString << "FPS " << pGameClock->GetFrameRate();

TextOutW(GdiDeviceContext, x_pos, y_pos,
myString.str().c_str(),
myString.str().length());

В процессе обучения я быстро углубился в вывод простого текста GDI, поскольку у меня изначально были проблемы с обновлением свойства заголовка окна приложения с помощью winapi. SetWindowTextW функция. Кажется, ему не нравится, когда он вызывается с высокой частотой в главном цикле, в результате чего моя система перестает отвечать на запросы при запуске программы, и, следовательно, возникает необходимость в изучении базового GDI для вывода в мою клиентскую область окна, а не в строку заголовка окна.

pGameClock->GetFrameRate(); Кстати, любезно предоставлена ​​реализация класса часов и таймеров высокого разрешения, разработанного талантливым Ноэль Ллопис и представлены в Программирование игр Gems 4. (Спасибо Ноэль).

Я также обнаружил, что еще многое предстоит узнать о методах более производительного форматирования строк & методы построения, особенно применительно к требованиям в реальном времени в играх, но я подозреваю, что мне лучше будет http://gamedev.stackexchange.com (который я только недавно обнаружил) для дальнейших вопросов и помощи?

Книги, которые помогли этому C ++ noob лучше понять потоки ввода и вывода:

  • Принципы и практика программирования с использованием C ++, Бьярне Страуструп
  • C ++ для всех, 2-е издание, от Кей Хорстманн
0

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