CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

救救我吧,屏幕为什么总是闪烁?!!

楼主mazhahn()2003-09-02 11:55:40 在 VC/MFC / 界面 提问

主对话框中的ONPAINT()函数    
  void   CAutoTokenDlg::OnPaint()      
  {    
          CPaintDC     dc(this);    
          GetClientRect(m_DRect);    
          if(m_pImageDC->GetSafeHdc()==NULL)    
          {    
                  BITMAP         bm;    
                  //         CClientDC         dc(this);    
                  m_pImageDC->CreateCompatibleDC(&dc);    
                  m_pBitmap->LoadBitmap(IDB_MAIN);    
                  m_pImageDC->SelectObject(m_pBitmap);    
                  m_pBitmap->GetObject(sizeof(bm),&bm);    
                  m_SRect.SetRect(0,0,bm.bmWidth,bm.bmHeight);    
                  int   OldBltMode=dc.SetStretchBltMode(COLORONCOLOR);    
                  dc.StretchBlt(m_DRect.left,   m_DRect.top,   m_DRect.Width(),   m_DRect.Heig    
  ht(),   m_pImageDC,\    
                          m_SRect.left,   m_SRect.top,   m_SRect.Width(),   m_SRect.Height(),   SRCC    
  OPY);    
                  dc.SetStretchBltMode(OldBltMode);    
          }    
          //Invalidate(false);    
          //ValidateRect(m_MainShowDlgPos);    
  }    
   
  子对话框的ONPAINT()函数    
  {    
   
          CPaintDC   dc(this);   //   device   context   for   painting    
             
          //   TODO:   Add   your   message   handler   code   here    
          GetClientRect(m_DRect);    
          if(m_pImageDC->GetSafeHdc()==NULL)    
          {    
                  BITMAP         bm;    
                  //         CClientDC         dc(this);    
                  m_pImageDC->CreateCompatibleDC(&dc);    
                  m_pBitmap->LoadBitmap(IDB_MAP1);    
                  m_pImageDC->SelectObject(m_pBitmap);    
                  m_pBitmap->GetObject(sizeof(bm),&bm);    
                  m_SRect.SetRect(0,0,bm.bmWidth,bm.bmHeight);    
          }    
   
          TRACE("INITDIALOG:Source:\nleft=%ld\nright=%ld\ntop=%ld\nbottom=%ld\n",m_S    
  Rect.left,m_SRect.right,m_SRect.top,m_SRect.bottom);    
  //         TRACE("bm:\nwidth=%ld\nheight=%ld\n",bm.bmWidth,bm.bmHeight);    
          TRACE("INITDIALOG:Destine:\nleft=%ld\nright=%ld\ntop=%ld\nbottom=%ld\n",m_    
  DRect.left,m_DRect.right,m_DRect.top,m_DRect.bottom);    
   
          int   OldBltMode=dc.SetStretchBltMode(COLORONCOLOR);    
          dc.StretchBlt(m_DRect.left,   m_DRect.top,   m_DRect.Width(),   m_DRect.Height()    
  ,   m_pImageDC,\    
                                      m_SRect.left,   m_SRect.top,   m_SRect.Width(),   m_SRect.Height()    
  ,   SRCCOPY);    
          dc.SetStretchBltMode(OldBltMode);    
          //ValidateRect(m_DRect);    
                  //   Do   not   call   CDialog::OnPaint()   for   painting   messages    
  }    
   
  子对话框放置在主对话框的某个区域,单击某个按钮可以使该固定的区域显示对话框    
  但是总是在单击按钮的过程中闪烁!    
   
  有没有大侠告知我解决的办法,急急急急!! 问题点数:10、回复次数:2Top

1 楼yifengling0(逸枫)回复于 2003-09-02 12:29:49 得分 8

不要在OnPaint()中写  
   
  映射WM_ERASEBKGND   消息。  
   
  添加你的代码,return   true;Top

2 楼lygfqy(风清扬)回复于 2003-09-02 13:42:04 得分 2

主窗口加入WS_CLIPCHILDREN风格试试看Top

相关问题

  • linux 下屏幕闪烁?
  • GDI+ 屏幕闪烁问题
  • 大侠们,救救 我,该死的闪烁,
  • 为什么屏幕会闪烁?
  • 为什么屏幕会一直闪烁
  • DELL笔记本电脑屏幕闪烁
  • 请问怎样实现屏幕刷新而不产生屏幕闪烁?
  • 如何解决在屏幕刷新时的闪烁现象?
  • OpenGL的屏幕闪烁问题 高分送上!!!
  • OpenGL的屏幕闪烁问题。分数好商量

关键词

  • dc
  • pimagedc
  • srect
  • drect
  • bm
  • onpaint
  • pbitmap

得分解答快速导航

  • 帖主:mazhahn
  • yifengling0
  • lygfqy

相关链接

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

广告也精彩

反馈

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