2012-04-15 9 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; 
} 

を取得するためのコードは、これを使用しようとするコードです:

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から "some title"を返すと、すべて正常に動作するので、問題はgetTitle関数の中にあると考えています。

答えて

3

もちろん、文字列が繰り返されます。ウィンドウテキストが表示され、FPSとフレームタイムが追加され、ウィンドウテキストが変更された文字列に設定されます。次にgetTitleを呼び出すと、変更された文字列が返されます。

だから私はあなたがfooのウィンドウタイトルで始まる場合は、あなたのループの最初の2回の反復がにつながることを期待:

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

あなたはFPSを除去してからの時間の値をフレームする必要がありますあなたがgetTitleからそれを得るときのタイトル。さもなければ、あなたは無限に成長するタイトルを持つでしょう。

+0

Lol、ここで私はcharバッファで何が間違っているのかを調べようとしています、ありがとう! –

関連する問題