C++双缓冲区和内存

标签 c++ visual-c++ winapi gdi+

好的,我的双缓冲区工作正常,但它似乎占用了大量内存。

我知道双缓冲区应该存储我正在绘制的椭圆的拷贝,而不是在屏幕上绘制它,但之后它会删除拷贝并制作新拷贝,但它似乎并没有删除它 这是我的代码

hdc=GetDC(hWnd);
HDC memDC=CreateCompatibleDC(hdc);
HBITMAP hMemMap=CreateCompatibleBitmap(hdc, 300, 300);
HBITMAP hOldMap=(HBITMAP)SelectObject(memDC, hMemMap);

// Drawing
Graphics draw(memDC);
draw.FillRectangle(&green, 0, 0, 300, 25);
Font font(&fontfamily, 14, 0, UnitPixel);
PointF p1(180.0f, 4.0f);
PointF p2(30.0f, 4.0f);
draw.DrawString(level, -1, &font, p2, &blue);
draw.DrawString(str, -1, &font, p1, &blue);
draw.FillEllipse(&red, ball1.Ex, ball1.Ey, 25, 25);
draw.FillEllipse(&red, ball2.Ex, ball2.Ey, 25, 25);
draw.FillEllipse(&red, ball3.Ex, ball3.Ey, 25, 25);
draw.FillEllipse(&red, ball4.Ex, ball4.Ey, 25, 25);
draw.FillEllipse(&red, ball5.Ex, ball5.Ey, 25, 25);
draw.FillEllipse(&red, ball6.Ex, ball6.Ey, 25, 25);
draw.FillEllipse(&red, ball7.Ex, ball7.Ey, 25, 25);
draw.FillEllipse(&red, ball8.Ex, ball8.Ey, 25, 25);
draw.FillEllipse(&red, ball9.Ex, ball9.Ey, 25, 25);
draw.FillEllipse(&red, ball10.Ex, ball10.Ey, 25, 25);
BitBlt(hdc, 0, 0, 300, 300, memDC, 0, 0, SRCCOPY);
SelectObject(memDC, hOldMap);
DeleteObject(hMemMap);
DeleteDC(memDC);

有什么想法吗?

最佳答案

您正在销毁所有对象,但不会销毁 DC。绘图后必须调用 ReleaseDC。

参见 MSDN :

After painting with a common device context, the ReleaseDC function must be called to release the device context.

关于C++双缓冲区和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3506661/

相关文章:

c++ - OwnerDraw 与 WS_EX_COMPOSITED 在 XP 下

c++ - 消除未使用的虚函数

c++ - 强制 Visual Studio 仅使用标准 C++,而不使用平台特定的东西

c++ - 返回引用且仅返回引用

c++ - vector 正在抛出 bad_alloc

c++ - Visual C++ argv 问题

visual-c++ - 如何检测CListCtrl选择更改?

c++ - 如何将 win32 CHAR(char) 类型转换为标准字符串?

visual-c++ - 运行时库不匹配和 VC++ - 哦,痛苦!

c++ - 更改 win32 的单选按钮文本颜色