次のコードで win32 ウィンドウのタイトルを取得しようとしてから、wostringstream を使用して同じウィンドウのタイトルを変更しようとしています。タイトルを取得するコードは次のとおりです。
std::wstring Window::getTitle()const
{
int length = SendMessage(hwnd,WM_GETTEXTLENGTH,0,0);
if(length == -1)
return L"";
wchar_t* buffer = new wchar_t[length+1];
SendMessage(hwnd,WM_GETTEXT,length+1,(LPARAM)buffer);
std::wstring str(buffer);
delete[] buffer;
return str;
}
これを使用しようとするコードは次のとおりです。
std::wostringstream oss;
while(window->isRunning)
{
oss.str(L"");
oss<<window->getTitle()<<" FPS : "<<100<<" Frame Time"<<100;
window->setText(oss.str());
}
ウィンドウ タイトルに加えて frs とフレーム時間を表示する代わりに、ウィンドウ タイトルを表示し、FPS とフレーム時間のテキストを複数回繰り返します。バッファの最後に「\ 0」を追加してみました:
buffer[length] = '\0';
これは問題を解決しませんでした。getTitle から L"some title" を返すと、すべてが正しく機能するため、問題は getTitle 関数内にあると考えられます。