C++ 使用WM_GETTEXT获取窗口标题
尝试使用以下代码获取win32窗口的标题,然后尝试使用wostringstream更改相同的窗口标题。下面是获取标题的代码C++ 使用WM_GETTEXT获取窗口标题,c++,winapi,C++,Winapi,尝试使用以下代码获取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]; Se
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());
}
这并没有解决问题。如果我从getTitle返回L“some title”,那么一切都正常工作,因此我认为问题出在getTitle函数内部。当然字符串将重复出现。获取窗口文本,添加FPS和帧时间,然后将窗口文本设置为修改后的字符串。下次调用
getTitle
,它将返回修改后的字符串
因此,我希望如果您以窗口标题foo
开始,循环的前两次迭代将导致:
foo FPS : 100 Frame Time100
foo FPS : 100 Frame Time100 FPS : 100 Frame Time100
从
getTitle
获取标题时,必须从标题中删除FPS和帧时间值。否则,您的标题将无限增长。Lol,在这里我试图找出字符缓冲区的问题,谢谢!
foo FPS : 100 Frame Time100
foo FPS : 100 Frame Time100 FPS : 100 Frame Time100