1

こんにちは皆さん、ダブルバッファリングに問題があります。理由はわかりませんが、テキストが描画されません (ダブル バッファリングなしではテキストが描画されます)。

コードは次のとおりです。

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

どうしたの?

4

2 に答える 2

6

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);
于 2013-07-16T08:32:13.220 に答える