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

双缓冲的问题

楼主abbot(yama)2003-09-03 23:41:54 在 VC/MFC / 界面 提问

我想在客户区画一个动态图形,为了消除抖动,我使用了双缓冲区  
  代码如下,怎么也画不上,经我跟踪发现,是函数BitBlt()没有发挥作用,可我不知为什么会出这样的毛病,?请大虾们指点。  
  void   CVcgearView::OnDraw(CDC*   pDC)  
  {  
            CVcgearDoc*   pDoc   =   GetDocument();  
            ASSERT_VALID(pDoc);  
   
            CDC   memDC;  
            memDC.CreateCompatibleDC(pDC);  
            myDraw(&memDC);  
   
            CRect   rect;  
            GetClientRect(&rect);  
            pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);  
   
            DeleteDC(memDC);  
  //   TODO:   add   draw   code   for   native   data   here  
  } 问题点数:20、回复次数:9Top

1 楼abbot(yama)回复于 2003-09-04 00:12:16 得分 0

这应该不太难吧,怎么没人帮忙呢??Top

2 楼WQ771211(SyanSea)回复于 2003-09-05 17:26:21 得分 0

这是API的代码:  
   
  Dim   hMemDC   As   Long,   hBmp   As   Long  
  Dim   hBrush   As   Long,   hOldBrush   As   Long  
   
          hMemDC   =   CreateCompatibleDC(0)   '用0代替NULL  
          hBmp   =   CreateCompatibleBitmap(hMemDC,   100,   100)  
          Call   SelectObject(hMemDC,   hBmp)   '这句没把握  
           
           
          hBrush   =   CreateSolidBrush(RGB(255,   0,   0))  
          hOldBrush   =   SelectObject(hMemDC,   hBrush)  
          Call   Rectangle(hMemDC,   10,   10,   50,   50)  
          Call   SelectObject(hMemDC,   hOldBrush)  
          Call   DeleteObject(hBrush)  
           
           
          Call   BitBlt(Me.hdc,   0,   0,   100,   100,   hMemDC,   0,   0,   SRCCOPY)  
          Call   DeleteObject(hBmp)  
          Call   ReleaseDC(0,   hMemDC)  
   
  我的也有问题:为什么没有把红色的矩形画出来?好象只有黑白  
   
  Top

3 楼hiphop(小风)回复于 2003-09-05 18:01:16 得分 0

我也是用双缓冲   还是抖动~Top

4 楼hiphop(小风)回复于 2003-09-05 18:02:32 得分 0

我看过双缓冲的代码要用到2个CDC对象的Top

5 楼WQ771211(SyanSea)回复于 2003-09-05 18:05:37 得分 0

to   hiphop(小风)    
  是不是用了InvalidaRect和UpdateWindow只类的东西,会每次把窗口刷白  
  想想,在动画的侦与侦之间插入一些空白侦,有什么后果,闪。。。Top

6 楼hiphop(小风)回复于 2003-09-05 23:52:31 得分 0

这个我没看过呀   不过网上有动画显示的例子   你去看看吧Top

7 楼hiphop(小风)回复于 2003-09-05 23:54:05 得分 0

我看过别人写的   也没用InvalidaRect和UpdateWindow呀  
   
  但就没抖动   再琢磨琢磨Top

8 楼everandforever(Forever)回复于 2003-09-06 02:58:04 得分 20

void   CVcgearView::OnDraw(CDC*   pDC)  
  {  
            CVcgearDoc*   pDoc   =   GetDocument();  
            ASSERT_VALID(pDoc);  
   
            HDC   hMemDC   =   ::CreateCompatibleDC(NULL);//创建兼容内存DC  
            HBITMAP   hBmp   =   ::CreateCompatibleBitmap(pDC->m_hDC/*一定要创建和pDC兼容的DC*/,   ...   );  
            HBITMAP   hOldBmp   =   ::SelectObject(hMemDC,   hBmp);  
   
            myDraw(...);  
   
            CRect   rect;  
            GetClientRect(&rect);  
            ::BitBlt(pDC->m_hDC,   0,0,rect.Width(),rect.Height(),hMemDC,0,0,SRCCOPY);  
              //完工  
            ::SelectObject(hMemDC,   hOldBmp);    
            ::DeleteObject(hBmp);  
            ::DeleteDC(hMemDC);  
  }  
  Top

9 楼everandforever(Forever)回复于 2003-09-06 03:02:20 得分 0

"我的也有问题:为什么没有把红色的矩形画出来?好象只有黑白"  
  是因为:  
          hBmp   =   CreateCompatibleBitmap(hMemDC/*这个DC是黑白两色的*/,   100,   100)  
  所以你应该用   Me.hdc   这个DC来创建BITMAP.Top

相关问题

  • OpenGL双缓冲!急!!!
  • 双缓冲问题
  • 双缓冲绘图问题!!!
  • openGL 双缓冲问题
  • 双缓冲绘图问题?
  • 关于HDC及双缓冲的问题?
  • 请教:双缓冲的问题
  • 关于双缓冲的问题
  • 在DOS 下如何实现双缓冲技术.(C/C++)
  • _____高分求教,有关于双缓冲的问题______

关键词

  • dc
  • hmemdc
  • hbmp
  • pdc
  • memdc
  • holdbrush
  • selectobject
  • rect
  • hbrush
  • bitblt

得分解答快速导航

  • 帖主:abbot
  • everandforever

相关链接

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

广告也精彩

反馈

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