CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在SDI的定时器画图,画直线给出的参数和实际绘出的图形有很大的出入?(希望用过MSCom控件的大侠多多留意)

楼主piperliu(阿流)2004-09-03 20:47:01 在 VC/MFC / 基础类 提问

把来自串口的字符串分解转换为一系列整数之后存在链表中。  
  把这些数据绘成曲线在兼容内存位图中,再把位图拷贝的显示设备上。  
  我调试发现直线的参数就是给出的参数,但是实际绘出的图形和我想要的有很大的出入,根本就不对,不知问题出在那里? 问题点数:50、回复次数:3Top

1 楼huwei001982(凶猛的小狗)回复于 2004-09-04 09:52:39 得分 50

代码贴一些出来!    
   
  有可能是映射模式的问题!Top

2 楼piperliu(阿流)回复于 2004-09-04 19:42:19 得分 0

从串口获取字符串:  
  void   CMainView::OnComm()  
  {  
  VARIANT   vResponse;  
  char   *str;  
  char   *str1;  
          int   k,   nEvent,   i;  
         
          nEvent   =   m_MSComm.GetCommEvent();  
   
          switch(nEvent)  
  {  
  case   2:     //收到大于RTHresshold个字符  
  {  
  k   =   m_MSComm.GetInBufferCount();   //接收到的字符数目  
  if(k   >   0)  
  {  
  vResponse=m_MSComm.GetInput();   //read  
  //对数据进行其他处理    
  str   =   (char*)(unsigned   char*)   vResponse.parray->pvData;  
  }          
  //接收到字符,MSComm控件发送  
  //清除字符串中的不必要字符  
  i   =   0;  
  str1   =   str;  
  while(   i   <   k   )  
  {  
  i++;  
  str1++;  
  }  
  *str1   =   '\0';  
  StringToInt(   str   );//分解字符串并转换为整数  
  }  
  break;  
  case   3:     //CTS线状态发生了变化  
  break;  
  case   4:     //DSR线状态发生了变化  
  break;  
  case   5:     //CD线状态发生了变化  
  break;  
  case   6:     //Ring   Indicator发生变化  
  break;  
          }          
  }  
   
  分解字符串并转换为整数:  
  void   CMainView::StringToInt(   char   a[120]   )  
  {  
  char   *tokenPtr;  
  tokenPtr   =   strtok(   a,   "   ");  
   
  for(   int   i   =   0;   tokenPtr   !=   NULL;   i++   )  
  {  
  //MediumTemp.TempVel[i]   =   (   int   )fabs(   atoi(   tokenPtr   )   );  
  if(   TempList[   i   ].GetCount()   <=   PointNum   )  
  {  
  TempList[   i   ].AddTail(   (   int   )fabs(   atoi(   tokenPtr   )   )   );  
  }  
  tokenPtr   =   strtok(NULL,   "   ");  
  }  
  //数据存完毕之后才开始绘图,防止同时访问链表  
  BeginDrawGraph   =   TRUE;  
  }  
   
  //定时器中绘图:  
  CDC*   pDC   =   GetDC();  
  CPen   pen,   *pOldPen;  
  pen.CreatePen(   PS_SOLID,   Linewidth,   color   );  
  pOldPen   =   m_pdcMem->SelectObject(   &pen   );  
  CBitmap*   pOldBitmap;  
  pOldBitmap   =   m_pdcMem->SelectObject(   m_pBitmap   );  
   
  for(   int   j   =   1;   j   <=   AreaNum;   j++   )  
  {  
  if(   j   %   2   ==   0   )  
  NewX   =   OffSet   +   DrawAreaX/2   +   10*TempList[   j-1   ].GetCount();  
  else  
  NewX   =   OffSet+10*TempList[   j-1   ].GetCount();  
  NewY   =   125+DrawAreaY/6*((j-1)/2)-(int)TempList[   j-1   ].GetTail(   );  
   
  m_pdcMem->MoveTo(   OldX[j-1],   OldY[j-1]   );  
  m_pdcMem->LineTo(   NewX,   NewY   );  
  OldX[j-1]   =   NewX;  
  OldY[j-1]   =   NewY;  
  }  
   
  m_pdcMem->SelectObject(   pOldPen   );  
  m_pdcMem->SelectObject(   pOldBitmap   );  
  ReleaseDC(   pDC   );Top

3 楼piperliu(阿流)回复于 2004-09-04 19:45:34 得分 0

应该与映射模式没有关系。  
  我用rand随机数模拟过了,可以Top

相关问题

  • api(定时器)??
  • 关于定时器
  • 定时器问题!!!
  • 定时器问题。。。。。。
  • 定时器问题...
  • 求一定时器
  • 定时器问题
  • 定时器问题!!
  • 关于定时器
  • 如何关掉定时器

关键词

  • 字符
  • pdcmem
  • nevent
  • vresponse
  • 参数
  • 字符串
  • poldbitmap
  • mscomm
  • selectobject
  • str

得分解答快速导航

  • 帖主:piperliu
  • huwei001982

相关链接

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

广告也精彩

反馈

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