在对话框中的Picture控件上绘纯色矩形,根据数据变化改变矩形的颜色,所以加了OnTimer()函数,在里面调用绘图的函数。
    我试了在OnTimer里调用OnPaint(),OnPaint里加入如下代码:
         CPaintDC dc(GetDlgItem(IDC_PIC)); 
CBrush br,*pOldBrush;
……
         for(……)
         {
           br.CreateSolidBrush(RGB(……));
  pOldBrush=dc.SelectObject(&br);
  dc.Rectangle(……);
  dc.SelectObject(pOldBrush);
  br.DeleteObject();
         }编译成功,但绘图显示的与预期不符。
    然后我尝试给Dlg类添加消息处理函数OnDrawItem(),在OnTimer里调用该函数,报错“函数不接受0个参数”。
    还试了自己添加一个OnDraw函数,也是能编译成功但绘图显示与预期不符。
    请问该怎么解决,是不是上面的代码用在特定的函数中呢?

解决方案 »

  1.   

    你绘图操作放在OnPaint函数中去做,你改变数据以后,只要Invalidate()更新一下就可以了
      

  2.   

    不要调用OnPaint
    可以调用Invalide以激活OnPaint
      

  3.   

    同意上面的,在定时器中用Invalidate更新,触发OnPaint
      

  4.   

    定时器中用Invalidate更新,触发OnPaint
      

  5.   

    Invalidate
    同时画图时用双缓冲 避免闪烁
      

  6.   

    OnTimer时 Invalidate 是使窗口无效 所以自动会调用OnPaint
    双缓冲的意思是 
    在你往窗口绘制之前  现在另一块区域里绘制好(包括 背景 前景) 
    绘制好后 再会绘制到要显示的窗口上
    一般双缓冲是为了防止闪烁
    普通绘制:    图—》窗口
    双缓冲绘制:  图(和其他内容 如背景 )—》兼容DC——》窗口
      

  7.   

    OnTimer时 Invalidate 是使窗口无效 所以自动会调用OnPaint
    双缓冲的意思是  
    在你往窗口绘制之前 在另一块区域(一般是内存里)里绘制好(包括 背景 前景图)  
    绘制好后 再绘制到要显示的窗口上
    一般双缓冲是为了防止闪烁
    普通绘制: 图—》窗口
    双缓冲绘制: 图(和其他内容 如背景 )—》兼容DC——》窗口