读书人

双缓存绘图的一个小疑点

发布时间: 2012-04-08 14:38:30 作者: rapoo

双缓存绘图的一个小问题
void CSDIDrawView::OnDraw(CDC* pDC)
{
CSDIDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

pDC-> LineTo(100,200);
}
//OK

void CSDIDrawView::OnDraw(CDC* pDC)
{
CSDIDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.MoveTo(0,0);
memDC.LineTo(100,200);
pDC-> BitBlt(0,0,1000,1000,&memDC,0,0,SRCAND);
}
//没有画出来
...

[解决办法]
不正确,创建一个与memDC相关连的HBITMAP然后在画才可以
[解决办法]
测试成功

void CSDIDrawView::OnDraw(CDC* pDC)
{
CSDIDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

//********************************

CWindowDC dc(this);
CBitmap myBitmap;
CDC myDC;
myDC.CreateCompatibleDC(&dc);
myBitmap.CreateCompatibleBitmap(&dc,1000,1000);
CBitmap *pOldBitmap = myDC.SelectObject(&myBitmap);

CRect rc(0,0,1000,1000);
CBrush mybrush(RGB(255,255,255));
myDC.FillRect(&rc,&mybrush);

myDC.MoveTo(0,0);
myDC.LineTo(100,200);

myDC.SelectObject(pOldBitmap);
myDC.DeleteDC();

CDC outDC;
outDC.CreateCompatibleDC(&dc);
outDC.SelectObject(&myBitmap);
pDC-> BitBlt(0, 0, 1000, 1000, &outDC, 0, 0, SRCCOPY);
myBitmap.DeleteObject();

}

[解决办法]
myBitmap.CreateCompatibleBitmap(&dc,1000,1000);
别忘了这个,创建Bitmap。

读书人网 >VC/MFC

热点推荐