2012-04-15 122 views
3

尝试使用以下代码获取win32窗口的标题,然后尝试使用wostringstream更改相同的窗口标题。下面是代码拿到冠军使用WM_GETTEXT获取窗口标题

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; 
} 

这里是一个尝试使用此代码:而不是显示在窗口的标题加上FRS和帧时间结束意外事件发生是

std::wostringstream oss; 

while(window->isRunning) 
{ 

    oss.str(L""); 

    oss<<window->getTitle()<<" FPS : "<<100<<" Frame Time"<<100; 
    window->setText(oss.str()); 
} 

它会显示窗口标题,然后多次重复FPS和帧时间文本。我试图在缓冲区末尾添加一个'\ 0':

buffer[length] = '\0'; 

哪个没有解决问题。如果我从getTitle返回L“一些标题”,一切工作正常,所以我认为问题在getTitle函数内部。

回答

3

当然,字符串将被重复。您将获得窗口文本,添加FPS和帧时间,然后将窗口文本设置为已修改的字符串。下次您拨打getTitle时,它将返回修改过的字符串。

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

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

你必须从剥离FPS和帧时间值标题从getTitle得到。否则,你将拥有无限增长的标题。

+0

大声笑,在这里我试图找出什么是错误的字符缓冲区,谢谢! – 2012-04-15 03:41:28