2013-07-15 44 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