尝试使用以下代码获取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函数中。
答案 0 :(得分:3)
当然会重复这个字符串。您将获得窗口文本,添加FPS和帧时间,然后将窗口文本设置为修改后的字符串。下次调用getTitle
时,它将返回修改后的字符串。
所以我希望如果你开始使用foo
的窗口标题,你的循环的前两次迭代将导致:
foo FPS : 100 Frame Time100
foo FPS : 100 Frame Time100 FPS : 100 Frame Time100
从getTitle
获取时,您必须从标题中删除FPS和帧时间值。否则你将获得无限增长的头衔。