2014-02-26 305 views
1

因此,我使用WinAPI創建Windows應用程序,並且在處理WM_PAINT時使用TextOut()函數以便在窗口上寫入文本。C++ WinAPI TextOut()更新文本

case WM_PAINT: 
{ 
    PAINTSTRUCT ps; 
    HDC hdc; 
    hdc = BeginPaint(hwnd,&ps); 
    SelectObject(hdc,hfDefault); 
    TextOut(hdc,10,70,"Points: 0",9); 
    TextOut(hdc,10,85,"Level: 0",8); 
    // ... 
    EndPaint(hwnd,&ps); 
} 
break; 

如何變更功能後的TextOut()打印的文本被稱爲以及確定所述打印文本的長度的最後一個參數?

我已經使用谷歌搜索這個,但令我驚訝,我找不到任何相關的東西。關於TextOut()的一切問題都是關於文本字體的。

+0

你不能。再次使用不同的文本調用'TextOut',或使窗口無效以強制重繪。 –

+0

您不必等到WM_PAINT。改爲使用[GetDC](http://msdn.microsoft.com/en-us/library/windows/desktop/dd144871(v = vs.85).aspx)。 –

+0

它會要求一個例子嗎? – yop

回答

4

也許是這樣的....

// I'll assume hwnd is global 
void OnSomeActionToRefreshValues() 
{ 
    HDC hdc = ::GetDc(hwnd); 
    DrawValues(hdc, 88, 99); 
    ReleaseDC(hdc); 
} 

void DrawValues(HDC hdc, int points, int level) 
{ 
    // Might need a rectangle here to overwrite old text 
    SelectObject(hdc, hfDefault); // I assume hfDefault is global 
    TCHAR text[256]; 
    swprintf_s(text, 256, L"Points: %d", points); 
    TextOut(hdc, 10, 70, text, wcslen(text)); 
    swprintf_s(text, 256, L"Level: %d", level); 
    TextOut(hdc, 10, 85, text, wcslen(text)); 
} 

而且在你贏PROC:

case WM_PAINT: 
    PAINTSTRUCT ps; 
    HDC hdc; 
    hdc = BeginPaint(hwnd,&ps); 
    DrawValues(hdc, 88, 99); 
    EndPaint(hwnd,&ps); 
    break;