CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

坐标映射(bitblt)?

楼主liuyanlin26(liuyanlin26)2005-05-15 16:00:12 在 VC/MFC / 基础类 提问

在gdi作图中,为了避免屏幕的闪烁,我创建了一个和要显示图形pdc的兼容的内存dc对像和位图对象。  
  然后把pdc和兼容的dc的坐标原点都设在整个窗口客户的中心。如下:  
  CDC   MemDC;  
  MemDC.CreateCompatibleDC(pDC);  
  CBitmap   MemBitmap;  
  MemBitmap.CreateCompatibleBitmap(pDC,   cr.right,   cr.bottom);  
  CBitmap*   pOldBitmap   =   MemDC.SelectObject(&MemBitmap);  
   
  pDC->SetMapMode(MM_ANISOTROPIC);  
  pDC->SetWindowOrg(0,   0);    
  pDC->SetViewportOrg(cr.right/2,   cr.bottom   /   2);    
  pDC->SetWindowExt(cr.right,   cr.bottom);  
  pDC->SetViewportExt(cr.right,   -cr.bottom);  
   
  pMemDC->SetMapMode(MM_ANISOTROPIC);  
  pMemDC->SetWindowOrg(0,   0);  
  pMemDC->SetViewportOrg(cr.right/2,   cr.bottom   /   2);  
  pMemDC->SetWindowExt(cr.right,   cr.bottom);  
  pMemDC->SetViewportExt(cr.right,   -cr.bottom);  
   
                  pMemDC->MoveTo(0,   0);  
                  pMemDC->LineTo(cr.right/2,   cr.bottom/2);  
   
  pDC->BitBlt(-cr.right   /   2,   cr.bottom   /   2,   cr.right,   cr.bottom,   &MemDC,   -cr.right   /   2,   cr.bottom   /   2,   SRCCOPY);  
   
  MemDC.SelectObject(pOldBitmap);  
  pWnd->ReleaseDC(pDC);  
   
  但是我在窗口中看不到我画的图形,我想是bitblt的参数没有设置对,或是前面的坐标映射的关系没有对。请各位高手指点一下,谢谢! 问题点数:20、回复次数:7Top

1 楼kmzwm(狂战士)回复于 2005-05-15 16:52:39 得分 0

你为什么要设置映射方式呢?Top

2 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2005-05-15 16:59:16 得分 0

可能是画到窗口外啦..Top

3 楼owe(wsm)回复于 2005-05-15 17:02:08 得分 0

upTop

4 楼higherlin(命运与天意)回复于 2005-05-15 17:14:49 得分 0

不要用坐示映射啊!Top

5 楼xyw2278(启明星)回复于 2005-05-15 17:15:18 得分 10

//   下面是我在视图类OnDraw中完成的,奇怪的是有个问题,内存画刷的颜色什么时候变成了黑色!  
   
  CRect   cr;  
  GetClientRect(&cr);  
   
  CDC   MemDC;  
  MemDC.CreateCompatibleDC(pDC);  
  CBitmap   MemBitmap;  
  MemBitmap.CreateCompatibleBitmap(pDC,   cr.right,   cr.bottom);  
  CBitmap*   pOldBitmap   =   MemDC.SelectObject(&MemBitmap);  
   
  pDC->SetMapMode(MM_ANISOTROPIC);  
  pDC->SetWindowOrg(0,   0);    
  pDC->SetViewportOrg(cr.right/2,   cr.bottom   /   2);    
  pDC->SetWindowExt(cr.right,   cr.bottom);  
  pDC->SetViewportExt(cr.right,   -cr.bottom);  
   
  MemDC.SetMapMode(MM_ANISOTROPIC);  
  MemDC.SetWindowOrg(0,   0);  
  MemDC.SetViewportOrg(cr.right/2,   cr.bottom   /   2);  
  MemDC.SetWindowExt(cr.right,   cr.bottom);  
  MemDC.SetViewportExt(cr.right,   -cr.bottom);  
   
  CPen   pen(PS_SOLID,   1,   RGB(255,0,0));  
  CPen   *pOldPen   =   MemDC.SelectObject(&pen);  
   
  MemDC.MoveTo(0,   0);  
  MemDC.LineTo(cr.right/2,   cr.bottom/2);  
   
  MemDC.SelectObject(pOldPen);  
  pen.DeleteObject();  
   
  //pDC->MoveTo(0,   0);  
  //pDC->LineTo(cr.right/2,   cr.bottom/2);  
   
  pDC->BitBlt(-cr.right   /   2,   -cr.bottom   /   2,   cr.right,   cr.bottom,   &MemDC,   -cr.right   /   2,   -cr.bottom   /   2,   SRCCOPY);  
   
  MemDC.SelectObject(pOldBitmap);  
  MemBitmap.DeleteObject();  
  MemDC.DeleteDC();Top

6 楼kmzwm(狂战士)回复于 2005-05-15 17:19:32 得分 0

想起坐标映射,我就头大!Top

7 楼lonenomad(流浪汉)回复于 2005-05-15 19:39:23 得分 10

楼主的画错了内存环境,画在MemDC中,不是pMemDC中。说白了就是画在了你选中的位图上。就象xyw2278(启明星)   (   )   那样。  
  MemDC.MoveTo(0,   0);  
  MemDC.LineTo(cr.right/2,   cr.bottom/2);  
   
  MemDC.SelectObject(pOldPen);  
  TO:回复人:   xyw2278(启明星)   (   )   信誉:115    
  //   下面是我在视图类OnDraw中完成的,奇怪的是有个问题,内存画刷的颜色什么时候变成了黑色  
  你说的是花屏吧。那是因为位图没有填充颜色。  
  用Memdc.FillRect(rect,&brush);Top

相关问题

  • 关于坐标映射的问题?
  • 一个坐标映射问题?
  • 关于坐标映射的问题
  • 请问visual c++坐标映射和窗口坐标
  • 逻辑坐标与系统坐标及映射方式的关系?求救了!!
  • 关于“映射模式转变和坐标变换”的学习。
  • 关于在MM_TEXT映射下的坐标变换问题??
  • 关于双缓冲绘图与坐标映射的问题
  • 如何解决平面鼠标坐标和场景中坐标的映射关系
  • 在direct3d中,怎样将3d空间上的点的坐标,映射到当前的屏幕上的坐标???

关键词

  • 坐标
  • 内存
  • cr
  • memdc
  • pdc
  • bottom
  • membitmap
  • pmemdc
  • bitblt
  • setwindoworg

得分解答快速导航

  • 帖主:liuyanlin26
  • xyw2278
  • lonenomad

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo