4

尝试使用以下代码获取 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 函数内部。

4

1 回答 1

3

当然,字符串将被重复。您正在获取窗口文本,添加 FPS 和帧时间,然后将窗口文本设置为修改后的字符串。下次您调用 时getTitle,它将返回修改后的字符串。

所以我希望如果你从窗口标题开始foo,你的循环的前两次迭代将导致:

foo FPS : 100 Frame Time100
foo FPS : 100 Frame Time100 FPS : 100 Frame Time100

当您从getTitle. 否则,您将拥有无限增长的头衔。

于 2012-04-15T03:38:14.207 回答