创建兼容DC

z15881328000 2010-05-08 01:18:56
我有图形要画,为了避免闪烁,我打算用兼容DC,下列:
//画矩形区
CClientDC pdc(this);
CDC dc;
dc.CreateCompatibleDC(&pdc);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)); //白色画刷
dc.SelectObject(pBrush);
CRect rect;
GetDlgItem(IDC_STATIC_DRAW)->GetWindowRect(&rect);
ScreenToClient(&rect);
dc.Rectangle(CRect(rect.left+10,rect.top+20,rect.right-10,rect.bottom-10));
pdc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY); //复制到当前DC
为什么不能把我画的矩形显示出来?
...全文
245 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 z15881328000 的回复:]
我想自己画图啊
[/Quote]
就是自己绘图也要有个画布吧,用CreateCompatibleBitmap创建一个位图就相当于是一个画布
z15881328000 2010-05-08
  • 打赏
  • 举报
回复
GetDlgItem(IDC_LINE_WENDU)->GetWindowRect(&rectline);
ScreenToClient(&rectline);
bmp.LoadBitmap(IDB_BITMAP_SKY); //加载位图
dc.SelectObject(&bmp);
dc.SelectObject(&penA);
dc.MoveTo(0,rectline.Height()/2);
dc.LineTo(rectline.Width(),rectline.Height()/2);
pdc.BitBlt(rectline.left,rectline.top,rectline.Width(),rectline.Height(),&dc,0,0,SRCCOPY); //复制到当前DC


bmp.LoadBitmap(IDB_BITMAP_SKY); //加载位图的时候把原来的区域覆盖,尽管是同一位图,这里加载效果是0,0开始的位图,而以前是X,X开始的,不和谐啊
向立天 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 visualeleven 的回复:]
绘图的ls都说过了,我只补充一点,你的GDI资源用完了不要忘记了释放
Get...->Release..
Create...->Delete...
[/Quote]

这个很关键
Eleven 2010-05-08
  • 打赏
  • 举报
回复
绘图的ls都说过了,我只补充一点,你的GDI资源用完了不要忘记了释放
Get...->Release..
Create...->Delete...
向立天 2010-05-08
  • 打赏
  • 举报
回复
你就是想在一个图片上在绘图是吧
一步一步来
绘制图片到主DC你应该没问题吧
创建兼容dc你也会
那么首相创建兼容dc
然后用将图片绘制到主DC的方法把这个图片绘制到兼容dc上
然后在兼容dc画线这类的做你想做的操作
然后在复制到主DC上
z15881328000 2010-05-08
  • 打赏
  • 举报
回复
GetDlgItem(IDC_LINE_WENDU)->GetWindowRect(&rectline);
ScreenToClient(&rectline);
bmp.CreateCompatibleBitmap(&pdc,rectline.Width(),rectline.Height());
//bmp.LoadBitmap(IDB_BITMAP_SKY);
dc.SelectObject(&penA);
dc.MoveTo(0,rectline.Height()/2);
dc.LineTo(rectline.Width(),rectline.Height()/2);
pdc.BitBlt(rectline.left,rectline.top,rectline.Width(),rectline.Height(),&dc,0,0,SRCCOPY); //复制到当前DC
z15881328000 2010-05-08
  • 打赏
  • 举报
回复
bmp.CreateCompatibleBitmap(&pdc,rectline.Width(),rectline.Height());
bmp.LoadBitmap(IDB_BITMAP_SKY);
我开始想这样,却不行,楼上的能说详细点吗?
向立天 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 z15881328000 的回复:]
如果我想插入IDB_BITMAP_SKY背景呢?
[/Quote]

那还要为位图再创建DC用来选入位图进行绘制
z15881328000 2010-05-08
  • 打赏
  • 举报
回复
如果我想插入IDB_BITMAP_SKY背景呢?
邓学彬 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 z15881328000 的回复:]
我想自己画图啊
[/Quote]
你创建完兼容位图再画就是啊。

DC里没有位图是画不了,兼容位图只是一个空白的位图,没任何内容的,还需要你自己画。
z15881328000 2010-05-08
  • 打赏
  • 举报
回复
我想自己画图啊
邓学彬 2010-05-08
  • 打赏
  • 举报
回复
创建的兼容DC,还得创建一个兼容位图,并且把位图选入DC

Bitmap.CreateCompatibleBitmap(&pdc, rect.Width(), rect.Height());
dc.SelectObject(&Bitmap);
wltg2001 2010-05-08
  • 打赏
  • 举报
回复
在dc.CreateCompatibleDC(&pdc);之后用dc.CreateCompatibleBitmap创建一个兼容位图,然后再开始作图。

15,979

社区成员

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

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