本帖最后由 VisualEleven 于 2014-05-07 17:02:18 编辑

解决方案 »

  1.   

    你把全部的绘制任务打包放到Timer响应函数里面了,语法没问题,但是程序的效率低下!
    想想:timer的周期10ms,如果在10ms时间内绘制任务无法完成,新的定时中断又进来了,此种情况累积多了会怎样?
    给你个建议:把一些固定不变的背景内容(刻度线、箭头、位图等等)放到OnPaint()或OnDraw()函数里面去画,这样仅在必要的时候启动自动重绘。另外,即使是画动态的曲线(MoveTo/LineTo),也没必要每次都在Timer响应函数里面全部重绘,每次只需绘制新到的Point,全部重绘也放到OnPaint()或OnDraw()函数里面实现。
      

  2.   

    那在Timer函数里面完成什么功能呢?如何实现定时器Ontimer()和Onpaint()函数的配合?麻烦能讲详细点儿么?新手,谢谢了!!
      

  3.   

    资源泄漏的可能性很大 运行的时候看看任务管理器中GDI句柄的增加情况
      

  4.   

    win8中怎么查看任务管理器中GDI句柄?找了半天都没有看到,貌似xp系统中直接有显示
      

  5.   

    pMemDC.SelectObject(&membitmap); 
    -------------------
    HBITMAP hOldBitmp = (HBITMAP)pMemDC.SelectObject(&membitmap); 
    这些返回值只有需要pMemDC.SelectObject(hOldBitmap);
    否则你后面的membitmap.DeleteObject();这个操作是失败的,你可以自己Debug下调试一下,看看返回值是什么
      

  6.   

    最好在Ontimer()里面进行数据更新,然后InvalidRect或者RedrawWindow通知界面重回,最后在Onpaint()进行绘制工作
      

  7.   

    先前出现过deque越界的情况,那样是运行时直接报错,只有取消运行才能正常,而不是卡死重启
      

  8.   

    在Onpaint()函数绘图时是不是应该将基类的CDialogEx::OnPaint();注释掉?
      

  9.   

    在Onpaint()函数绘图时是不是应该将基类的CDialogEx::OnPaint();注释掉?
    不用
      

  10.   

    是不是直接将OnTimer的绘图部分剪切到OnPaint函数中?而在OnTimer函数 if(1== nIDEvent )中添加绘图编辑框的重回函数
    Crect rc;
    GeDlgItem(IDC_drawplace)->GetClientRect(rc);
    GeDlgItem(IDC_drawplace)->INvalidateRect(rc);
    但是我按这样写的话,运行时出错了,绘图框是空白的。没有绘制出图形来
      

  11.   

    在调试运行下,卡死时停留在afxwin1.inl文件中的位置如下
    AFXWIN_INLINE BOOL CBitmap::CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight)
    { return Attach(::CreateCompatibleBitmap(pDC->m_hDC, nWidth, nHeight)); }
    弹出错误提示框说:0x535aaf54(mfc100d.dll)有未经处理的异常,0xc0000005:读取位置0x00000004时发生访问冲突。
      

  12.   

    在Onpaint()函数绘图时是不是应该将基类的CDialogEx::OnPaint();注释掉?
    不注释也可以,把他放在你的处理函数之前调用就可以了