我在一个对话框上画了一个圆,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);
然后就不闪了。我想知道为什么会出现这种情况!
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);
然后就不闪了。我想知道为什么会出现这种情况!
你更新的区域不一样了
一个是对话框,
一个是静态控件
pwnd->Invalidate (false);我试过了,又较大的改观但是还是较闪!
而你如果用CWnd *pwnd=GetDlgItem(IDC_STATIC);,然后pwnd->Invalidate()的话,仅刷新该静态控件,对话框上面的其它控件,包括背景就不重新画了,所以不会闪烁!
pwnd->UpdateWindow ();给去掉!!