C++/WinAPI GDI+ 双缓冲

标签 c++ winapi double gdi+ buffering

<分区>

大家好,我遇到了双缓冲问题。 我不知道为什么,但我的文本没有绘制(没有双缓冲文本正在绘制)。

代码如下:

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

怎么了?

最佳答案

CreateCompatibleDC 不会创建您可以在其上绘图的 Canvas 。您必须创建位图并将其分配给上下文。

试试这个:

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

关于C++/WinAPI GDI+ 双缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17664549/

相关文章:

c++ - 转换基类的双指针

php - 使用 SWIG 在 PHP 中迭代 std::map

java - Java Integer 和 Double 对象是否有不必要的开销?

c++ - 了解 bash 中程序使用的内存(在 ubuntu linux 中)

c++ - 如果初始化需要shared_from_this,如何在一次调用中构建一个类?

c++ - 在多线程环境中使用 CList

javascript - STA COM 对象中的阻塞

c++ - 如何将函数传输到匿名管道 WinAPI?

java Float.MAX_VALUE 转 Double

c# - 为什么没有M后缀的c#小数不能初始化?