读书人

使用双缓冲背景出现了有关问题求解答

发布时间: 2013-04-05 10:24:33 作者: rapoo

使用双缓冲背景出现了问题求解答?
大家好 这是我在MFC单文档下的按键的实现代码 点击按键后绘制的图形出现了错位,上侧和左侧各有黑色的一条
我想让rect里完全是我绘的图不要有黑色的 请问大家产生黑条的原因是什么?

void CtestgdiView::OnTestTest1()
{
// TODO: 在此添加命令处理程序代码
CRect rect;
GetClientRect(&rect);
rect.left+=155;
rect.right+=155;
rect.top+=30;
rect.bottom+=30;
CDC* pdc=GetDC();
GetClientRect(&rect);
rect.left+=155;
rect.top+=30;[code=C/C++]

pdc->Rectangle(&rect);
pdc->MoveTo(rect.left,rect.top);
pdc->LineTo(rect.right,rect.bottom);
CDC dcMem; //用于缓冲作图的内存DC
CBitmap bmp; //内存中承载临时图象的位图
dcMem.CreateCompatibleDC(pdc); //依附窗口DC创建兼容内存DC
//m_ctrlListCtrl.GetClientRect(&rect);
bmp.CreateCompatibleBitmap(pdc,rect.Width(),rect.Height());//创建兼容位图
dcMem.SelectObject(&bmp); //将位图选择进内存DC
dcMem.FillSolidRect(&rect,pdc->GetBkColor()); //按原来背景填充客户区,不然会是黑色
dcMem.Rectangle(&rect);
dcMem.MoveTo(rect.left,rect.top);
dcMem.LineTo(rect.right,rect.bottom);
pdc->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(), &dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject(); //删除位图
ReleaseDC(pdc);
}
[/code]
[解决办法]
pdc->BitBlt(0,0,rect.Width(),rect.Height(), &dcMem,0,0,SRCCOPY);rect.left+=155;rect.top+=30;使BitBlt开始位置变了,开始位置设为0,0就好了

读书人网 >VC/MFC

热点推荐