2012-04-15 2 views
3

다음 코드를 사용하여 win32 창의 제목을 얻은 다음 wostringstream을 사용하여 동일한 창 제목을 변경하려고합니다. 창 제목 플러스 FRS이고 일이 끝나는 어떤 프레임 시간을 표시하는 대신WM_GETTEXT를 사용하여 창 제목 가져 오기

std::wostringstream oss; 

while(window->isRunning) 
{ 

    oss.str(L""); 

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

: 여기에 제목 여기

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

을 얻을 수있는 코드는이를 사용하려고 코드입니다 창 제목을 표시 한 다음 FPS 및 프레임 시간 텍스트를 여러 번 반복합니다. 버퍼 끝에 '\ 0'을 추가하려고 시도했습니다.

buffer[length] = '\0'; 

어느 것이 문제를 해결하지 못했습니다. getTitle에서 "일부 제목"을 반환하면 모든 것이 올바르게 작동하므로 문제는 getTitle 함수 내부에 있다고 생각합니다.

답변

3

물론 문자열이 반복됩니다. 창 텍스트를 가져 와서 FPS 및 프레임 시간을 추가 한 다음 창 텍스트를 수정 된 문자열로 설정합니다. 다음 번에 getTitle으로 전화하면 수정 된 문자열이 반환됩니다.

그래서 난 당신이 foo의 창 제목으로 시작하는 경우, 루프의 처음 두 반복이 될 것으로 기대 :

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

당신은에서 시간 값을 FPS를 제거하고 프레임해야합니다 너가 getTitle에서 그것을 얻을 때 제목. 그렇지 않으면 무한한 성장세를 보일 것입니다.

+0

Lol, 그리고 여기에 무엇이 char 버퍼가 잘못되었는지 확인하려고합니다. 감사합니다! –