我用MFC开发了一个对话框程序,程序主界面上有个TabCtrl,然后在该TabCtrl上有多个子对话框,用于显示曲线用,每个子对话框上只放了个绘制曲线的控件,现在有个问题一直未解决,特来请教高手帮忙。
我通过串口接收数据,然后绘制到子对话框的曲线控件上,每次接收到数据后会更新曲线,但是每次切换到其他程序,再切换回我的这个程序时,曲线控件就恢复为初始设定状态,比如纵坐标在没有数据时我设置为0到100,在实际接收到数据时,跨度还是100,但是范围可能是-3到97这样,且没有曲线显示!每次从其他程序切换回来就恢复为初始状态,除非我用鼠标点一下曲线,或者是接收到数据,自动更新一下。
   在子对话框的onPaint()函数中,尝试了setFocus(),UpdateData(),Invalidate()等等,都是老样子,无法在切换回来时能自动显示最新的曲线情况。   希望有牛人帮忙解释一下,到底是哪儿的问题?

解决方案 »

  1.   

    你的绘图代码都是在子对话框的OnPaint里面了吗?看样子不像。你说“除非我用鼠标点一下曲线”,看看这里的绘图代码是不是已经不在OnPaint里面了,如果是这样,移过去。不要在子对话框的onPaint()函数中setFocus()UpdateData()Invalidate()等等
      

  2.   

    你的画图的程序在什么地方,一般放到OnPaint里面.
    如果是放在onpaint里面,则试试在OnActivate里面Invalidate();
      

  3.   

    画图的代码请全部放到OnPaint()中,这样就没问题。贴点代码吧&……
      

  4.   

    我是用的MSCOMM串口控件接收数据,然后调用曲线控件的绘图函数,绘制曲线的,在OnPaint()函数实现没有必要吧,因为我的数据是随时更新的,在OnPaint()函数中难道把曲线从头开始绘制么?不大合理啊
      

  5.   

    补充一下,我用的是IOCOMP的PLOT控件,接收到串口数据,就调用该控件的AddXY(X,Y)函数添加一个点,控件上的DATAVIEW部分会自动把点连起来,构成曲线。
      

  6.   

    这个肯定要在OnPaint里面绘呀,因为切换窗口的时候就会调用OnPaint,OnPaint里面如果没有你画曲线的代码,切换窗口的时候曲线自然就没了。
    每次切换窗口的时候,都得把曲线重画!
      

  7.   

    我感觉需要单击一下DATAVIEW部分才会显示绘制的曲线,是触发了WM_PAINT呢还是什么,能不能直接在OnPaint()函数中触发该消息?