2013-07-15 201 views
1

你好傢伙我有一個雙緩衝的問題。 我不知道爲什麼,但我的文字沒有繪製(沒有雙緩衝文本就是繪圖)。C++/WinAPI GDI +雙緩衝

這裏是代碼:

m_hDC = BeginPaint(m_hWnd, &m_ps); 

m_graphics = new Graphics(m_hDC); 
memDC = CreateCompatibleDC(m_hDC); 
pMemGraphics = new Graphics(memDC); 

pMemGraphics->DrawString(L"Hello world!", -1, font, PointF(100, 100), &brush); 

BitBlt(m_hDC, 0, 0, 500, 200, memDC, 0, 0, SRCCOPY); 
EndPaint(m_hWnd, &m_ps); 

delete(pMemGraphics); 
delete(m_graphics); 

的哪些錯誤?

+1

那些'新'和'刪除'看起來非常不必要。也可以嘗試從'm_hDC'選擇'CreateCompatibleBitmap'到'memDC'。 – chris

回答

4

CreateCompatibleDC不會創建您可以繪製的畫布。您必須創建一個位圖並將其分配給上下文。

試試這個:

m_hDC = BeginPaint(m_hWnd, &m_ps); 

memDC = CreateCompatibleDC(m_hDC); 
HBITMAP hBM = CreateCompatibleBitmap(m_hDC, 500, 200); 
SelectObject(memDC, hBM); 
// Now you can draw on memDC 

// Fill with white color 
RECT r; 
SetRect(&r, 0, 0, 500, 200); 
FillRect(memDC, &r, GetStockObject(WHITE_BRUSH)); 

// Draw text 
::TextOut(memDC, 100, 100, "Hello world!", 12); 

// Paint on window 
BitBlt(m_hDC, 0, 0, 500, 200, memDC, 0, 0, SRCCOPY); 

DeleteObject(hBM); 
DeleteDC(memDC); 

EndPaint(m_hWnd, &m_ps); 
+0

這只是繪製黑色矩形... –

+0

CreateCompatibleBitmap(memDC ...中的錯誤,參數必須是m_hDC,我不知道什麼是類Graphics,所以我使用TextOut繪製文本。 – marbel82