双缓冲颜色丢失了。。。。。

superroy 2010-01-04 11:07:49
MFC OnDraw(...)函数代码如下:
GetClientRect(&rc);
CPen RedPen_Solid,BluePen;
CDC dcMem; //用于缓冲作图的内存DC
CBitmap bmp;

dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC
bmp.CreateCompatibleBitmap(&dcMem,rc.Width(),rc.Height());//创建兼容位图
dcMem.SelectObject(&bmp);

RedPen_Solid.CreatePen(PS_SOLID,1,RGB(128,0,0));
dcMem.SelectObject(&RedPen_Solid);
dcMem.SelectObject(&RedPen_Solid);


dcMem.FillSolidRect(rc,RGB(255,255,255));
dcMem.MoveTo(0,redline1);
dcMem.LineTo(rc.Width(),redline1);//redline1&redline都为已知常数
dcMem.MoveTo(rc.Width()-redline_y,0);
dcMem.LineTo(rc.Width()-redline_y,rc.Height());

pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
RedPen_Solid.DeleteObject();

dcMem.DeleteDC(); //删除DC
bmp.DeleteObject();

不用双缓冲的时候好好的。
怎么加了双缓冲最后显示图像成黑白的了。。。。。
求老师教我!
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nintendo_dskay 2010-01-05
  • 打赏
  • 举报
回复
应该是针对设备DC创建兼容位图吧,bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height())
superroy 2010-01-04
  • 打赏
  • 举报
回复
明白了,设备DC默认是没有颜色的,
bmp.CreateCompatibleBitmap(&dcMem,rc.Width(),rc.Height());//
改为:
bmp.CreateCompatibleBitmap(PDC,rc.Width(),rc.Height());//
问题解决!

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧