我在一个对话框上画了一个圆,OnPaint() 代码如下
                  CWnd *pwnd=this;
CRect rect1;
    pwnd->GetClientRect(&rect1);
    CDC *mydc=GetDlgItem(IDC_STATIC)->GetDC ();
             pwnd->Invalidate ();
    pwnd->UpdateWindow ();
    mydc->SelectStockObject(BLACK_PEN);
    mydc->Ellipse (rect1);
             pwnd->ReleaseDC (mydc);
运行后,那个圆形 狂闪
没办法,我又在对话框上加了一个静态控件,把上面代码的第一行,改成了
CWnd *pwnd=GetDlgItem(IDC_STATIC);
然后就不闪了。我想知道为什么会出现这种情况!

解决方案 »

  1.   

    不是不闪了,而是你现在刷新的是静态控件,看不到闪而已pwnd->Invalidate ();换成pwnd->Invalidate (false);试试
      

  2.   

    pwnd->GetClientRect(&rect1);
    你更新的区域不一样了
    一个是对话框,
    一个是静态控件
      

  3.   

    怎样才能让在对话框上画的图形不闪呢?
    pwnd->Invalidate (false);我试过了,又较大的改观但是还是较闪!
      

  4.   

    pwnd->Invalidate()是把对话框重新刷一遍,这个操作会导致的对话框上所有的控件重新画,所以会闪烁
    而你如果用CWnd *pwnd=GetDlgItem(IDC_STATIC);,然后pwnd->Invalidate()的话,仅刷新该静态控件,对话框上面的其它控件,包括背景就不重新画了,所以不会闪烁!
      

  5.   

    把pwnd->Invalidate ();
       pwnd->UpdateWindow ();给去掉!!