0
好吧,我的双缓冲区工作正常,但它似乎使用了大量的内存。C++双缓冲区和内存
我知道双缓冲区应该存储我绘制的椭圆的副本,而不是将其绘制在屏幕上,但之后它会删除副本并创建新副本,但似乎并未将其删除 这里是我的代码
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);
任何想法?
当你说它没有被删除,你的意思是内存使用不会减少?每次调用这个函数时,内存使用量会不断增加? – 2010-08-17 20:37:16
我不知道在这种情况下,但通常双缓冲不涉及删除任何东西。你画到“后台缓冲区”(复制屏幕没有显示),然后当你完成时,你“交换缓冲区”,所以看起来你在同一时间画了一切。你保留旧的缓冲区以便为下一帧画画。每个框架,你交换显示哪一个,以及你绘制哪一个。在像这样的设计中没有空间去分配...... – 2010-08-17 20:42:54
是的,它增加了。但它不会减少 – Ramilol 2010-08-17 20:43:03