C++ 使用WM_GETTEXT获取窗口标题

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

尝试使用以下代码获取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());
}

这并没有解决问题。如果我从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