CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请问我这个画图的代码,怎么在2000和XP下运行是正常的,98下就不行呢??急啊!!谢谢

楼主frankeying(xy)2004-12-02 22:15:45 在 VC/MFC / 基础类 提问

请问我这个画图的代码,怎么在2000和XP下运行是正常的,98下就不行呢??急啊!!谢谢  
  在98下,不能实现黑白交替的正方形格子的翻转。这是什么原因呢????  
  代码的功能:画黑白正方形交替的图形并定时翻转(比如第一次画出的左上角的格子是黑色的,翻转一次后画出的左上角的格子是白色,依次这样轮流,视觉上感觉向黑白交替的格子在翻转),到一定时刻结束。  
  思路:定时器1用来触发翻转时刻比如1秒翻转一次,定时器2用来结束翻转。  
   
  主要代码:  
  void   CDrawPad::DrawElement(CDC   *pDC,   const   CRect   DrawRect,   BOOL   BlackFirst)//画黑白棋盘格图  
  {  
  if   (!pDC)  
  return;  
                    //获得该控件的矩形区域;  
  CBrush   *pOldBrush   =   (CBrush*)pDC->SelectStockObject(WHITE_BRUSH);  
  CPen   *pOldPen   =   (CPen*)pDC->SelectStockObject(NULL_PEN);  
  pDC->Rectangle(DrawRect);  
  pDC->SelectStockObject(BLACK_BRUSH);  
  CRect   rcBlack(DrawRect.left,   DrawRect.top,   DrawRect.left   +   m_size0,   DrawRect.top   +   m_size0);  
  if   (!BlackFirst)  
  {  
  rcBlack.OffsetRect(m_size0,   0);  
  }  
  while   (rcBlack.top   <   DrawRect.bottom)  
  {  
  while   (rcBlack.left   <   DrawRect.right)  
  {  
  pDC->Rectangle(rcBlack);  
  rcBlack.OffsetRect(m_size0   +   m_size0,   0);  
  }  
  rcBlack.left   =   DrawRect.left;  
  rcBlack.top   +=   m_size0;  
  rcBlack.right   =   rcBlack.left   +   m_size0;  
  rcBlack.bottom   =   rcBlack.top   +   m_size0;  
  if   (BlackFirst)  
  {  
  rcBlack.OffsetRect(m_size0,   0);  
  }  
  BlackFirst   =   !BlackFirst;  
  }  
  pDC->SelectObject(pOldPen);  
  pDC->SelectObject(pOldBrush);  
   
   
          //在屏幕中央画小红点部分  
          //画红点部分开始  
          pDC->FillSolidRect(DrawRect.right/2-5,   DrawRect.bottom/2-5,   10,   10,   RGB(255,0,0)   );  
   
  ReleaseDC(pDC);  
   
  }    
   
  void   CDrawPad::OnPaint()   //画黑白棋盘格图  
  {  
  CPaintDC   dc(this);   //   device   context   for   painting  
          CDC   *memDC   =   new   CDC;  
  memDC->CreateCompatibleDC(NULL);  
  CBitmap   *memBmp   =   new   CBitmap;  
  CRect   ClientRect;  
  GetClientRect(ClientRect);  
  memBmp->CreateCompatibleBitmap(&dc,   ClientRect.Width(),   ClientRect.Height());  
  CBitmap   *pOldBmp   =   memDC->SelectObject(memBmp);  
  if((k%2)==0)  
  DrawElement(&dc,   ClientRect);  
  else  
  DrawElement(&dc,   ClientRect,   FALSE);  
  dc.BitBlt(ClientRect.left,   ClientRect.top,   ClientRect.Width(),   ClientRect.Height(),  
  memDC,   0,   0,   SRCCOPY);  
  memDC->SelectObject(pOldBmp);  
  memDC->DeleteDC();  
  delete   memDC;  
  memBmp->DeleteObject();  
  delete   memBmp;  
  k++;  
  }  
   
  void   CDrawPad::OnShowWindow(BOOL   bShow,   UINT   nStatus)    
  {  
   
  //   添加定时器  
  if(bShow)  
  {        
  int   sj00=1000/m_turn;  
  int   cj00=m_over*1000;  
  m_timerID1   =   this->SetTimer(24,sj00,NULL);  
  m_timerID2   =   this->SetTimer(25,cj00,NULL);  
  }  
  CDialog::OnShowWindow(bShow,   nStatus);  
   
  }  
   
  void   CDrawPad::OnTimer(UINT   nIDEvent)   //定时进行黑白棋盘格翻转  
  {  
  //   TODO:   Add   your   message   handler   code   here   and/or   call   default  
  switch   (nIDEvent)  
  {  
  case   24:  
  InvalidateRect(FALSE);  
  break;  
   
  case   25:  
         
  KillTimer(m_timerID1);  
  KillTimer(m_timerID2);  
                    gm_bWatch   =   FALSE;  
  ShowWindow(FALSE);  
  break;  
  }  
   
  CDialog::OnTimer(nIDEvent);  
  }  
   
  谢谢大家,给点建议把,急啊 问题点数:20、回复次数:5Top

1 楼freeheart1977(逍遥的心)回复于 2004-12-03 14:43:47 得分 5

看看CreateCompatibleDCTop

2 楼ChaseTheSun787(the sun)回复于 2004-12-03 17:09:54 得分 3

不要Release   CPaintDC。其实所有的CDC都不用Release,除非你要重新创建一个DC。Top

3 楼koko1998(高价购买火车票)回复于 2004-12-03 19:51:57 得分 6

是不是你写的工程是unicode   形势阿,是的话,在98下不能运行是正常的。98对大部分unicode函数都不支持的Top

4 楼koko1998(高价购买火车票)回复于 2004-12-07 21:15:50 得分 6

vc.net:工程右键的配置属性中有个General下的Character   Set中选择Use   Unicode   Character   Set就是unicode工程,选择Use   Muti-Byte   Character   Set就是Ansi工程  
   
  vc的嘛,好像是在工程的设置里吧!Top

5 楼koko1998(高价购买火车票)回复于 2004-12-08 09:20:02 得分 0

我看你还是在msn上查查可能出现问题的函数吧。  
  主要是看看这些:  
  Requirements    
      Windows   NT/2000/XP:   Included   in   Windows   NT   3.1   and   later.  
      Windows   95/98/Me:   Included   in   Windows   95   and   later.  
      Header:   Declared   in   Wingdi.h;   include   Windows.h.  
      Library:   Use   Gdi32.lib.  
   
  我知道的98下支持的有:  
  SetMapMode,SelectObject,Moveto   ,Lineto,SetBkMode,SetBkColor,SetTextColor,SetStretchBltMode...  
   
  my   email:tiger_mhu@hotmail.comTop

相关问题

  • 寻画图源代码
  • 求画图的代码
  • 寻vc画图源代码(50分)
  • 求画图程序DrawTool的源代码!
  • 求画图方法和代码...
  • 代码运行效率
  • 代码运行错误!!!!
  • java代码运行问题
  • 需要类似windows画图的源代码?
  • 帮我分析一下这段代码吧,画图的,高分!

关键词

  • 代码
  • dc
  • unicode
  • top
  • rcblack
  • clientrect
  • blackfirst
  • membmp
  • drawrect
  • 翻转

得分解答快速导航

  • 帖主:frankeying
  • freeheart1977
  • ChaseTheSun787
  • koko1998
  • koko1998

相关链接

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

广告也精彩

反馈

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