2012-04-15 56 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