使用WM_GETTEXT获取窗口标题

时间:2012-04-15 03:27:32

标签: 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];
    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函数中。

1 个答案:

答案 0 :(得分:3)

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

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

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

getTitle获取时,您必须从标题中删除FPS和帧时间值。否则你将获得无限增长的头衔。