设置了更新区域了吗?
为何不调用INVALIDATE()算了?

解决方案 »

  1.   

    源码如下:
        CFontDialog dlg;
        if (IDOK == dlg.DoModal())
    {
    dlg.GetCurrentFont(&lf);
    font1=true;
    } //Invalidate(TRUE);
    PostMessage(WM_PAINT,0,0);使用Invalidate(TRUE)没有问题,可以刷新。
    请指点
      

  2.   

    WM_PAINT是个优先级比较低的消息,它在消息队列里经常为其他消息让路.
    你可以使用SendMessage即时更新...
      

  3.   

    关键是代码执行了,但就是不刷新
    SendMessage也是一样的
      

  4.   

    这样做恐怕没有用,窗口收到WM_PAINT之后的确调用了OnPaint(),问题是BeginPaint()获得的无效窗口区域没有定义,windows觉得你的窗口没有更新的必要,把你的绘制代码clip掉了。
      

  5.   

    必须调用Invalidate(TRUE)使客户区无效才能更新
      

  6.   

    那如何解决呢,如果使用Invalidate(TRUE)的话,就根本不需要传递消息了
      

  7.   

    关注!
    我也碰过!
    通常我是在OnPaint()设置TIMMER  如1ms
    然后,在ONTIMER()中关掉 TIMER,并执行重绘,就行了!
    搞不懂咋回事???
    高手指点!
      

  8.   

    可以使用InvalidateRect或InvalidateRgn更新需要部分区域
      

  9.   

    tengy1(逐日)
    什么意思,要在ONTIMER()中重绘