为什么我的cview::OnDraw 绘制的是黑白的

fylinwater 2010-05-06 02:53:01
下面这段代码放到 Cview::OnDraw() 里,线没有画成红色的,而是黑的
{
CRect rect,ellipseRect;
GetClientRect(&rect);
CDC dcMem; //用于缓冲作图的内存DC
CBitmap bmp; //内存中承载临时图象的位图
dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC
bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height());//创建兼容位图
dcMem.SelectObject(&bmp); //将位图选择进内存DC
dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色


// 在内存里操作图形

CPen gridPen(PS_SOLID, 3, RGB(255,0,0)); // 为什么选择颜色不其作用?
CPen* pOldPen;
pOldPen = dcMem.SelectObject(&gridPen);
dcMem.SaveDC();

dcMem.MoveTo(CPoint(0,0));
dcMem.LineTo(CPoint(100,300));
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject();
}
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmanzhao 2010-05-06
  • 打赏
  • 举报
回复
CreateCompatibaleBitmap的时候,第一个参数改为pDC不要用dcMem
liboyanghui 2010-05-06
  • 打赏
  • 举报
回复
dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色
划线
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台

观摩的,不是很清楚。以前没试过每次重绘都填充客户区,在程序开始为其设定一个颜色,就不不管了。
cpp2017 2010-05-06
  • 打赏
  • 举报
回复
画的线是黑色的, 我希望画出彩色的线
==>原来这样.


bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height());//创建兼容位图

换成



bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容位图



fylinwater 2010-05-06
  • 打赏
  • 举报
回复
刀客的方法也没有效果

好像 CBitmap bmp; 只显示黑白图
fylinwater 2010-05-06
  • 打赏
  • 举报
回复
谢谢楼上热心,可是没有效果,你只是把我的背景改成了黑色的

dcMem.MoveTo(CPoint(0,0));
dcMem.LineTo(CPoint(100,300));
画的线是黑色的, 我希望画出彩色的线
uc_fly 2010-05-06
  • 打赏
  • 举报
回复
CPen gridPen(PS_SOLID, 3, RGB(255,0,0)); -->

CPen* pNewPen = new CPen(PS_SOLID, 3, RGB(255,0,0))
cpp2017 2010-05-06
  • 打赏
  • 举报
回复
dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色
==>
dcMem.FillSolidRect(rect,RGB(0xff,0,0));

15,979

社区成员

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

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