InvalidateRect刷新局部控件的源代码
我的dialog上有九个大小一样的picture控件作为缩略图显示用,另外有个大点的picture控件作为预览界面,现在想只刷新这九个大小一样的控件,我是这样用的:
C/C++ code
?1234 CRect rect; GetDlgItem(IDC_THUMB_1)->GetClientRect(&rect); //IDC_THUMB_1为九个控件中的一个 InvalidateRect(&rect, TRUE);
在onPaint中是这样写的:
C/C++ code
?123456 void CThumbnailDlg::OnPaint() { CPaintDC dc(this); // device context for painting DrawThumbnails(); //这个函数用来在九个控件上更新图片 }
我现在是调用InvalidateRect后就跑到onPaint中,然后调用DrawThumbnails来重画九个控件中的图,但是调用InvalidateRect(&rect, TRUE)之后每次重绘时都没有清除控件上之前的背景内容,而是覆盖上去的,这样会造成如果下一张图没有画满一个控件会看到上一张图没被覆盖的内容。就连我指定的那个控件IDC_THUMB_1都没有先清除背景内容,InvalidateRect最后一个参数为TRUE应该会清除呀,但是现在没有,不知道为什么?如果调用Invalidate(TRUE)就可以在绘图时先把控件上内容清除然后绘图,但是这样会刷新我不想更新的那个大点的预览界面。
请大家告诉我怎么才能刷新这九个控件的时候能先清除背景的内容,或是有别的替代方案。先谢谢大家,希望大家踊跃围观!
父窗体风格里面加上WS_CLIPCHILDREN
然后Invalidate(TRUE)父窗体的时候,子控件就不会刷新了。
如果要刷新的话,用子控件Invalidate来控制刷新。
Create的时候把style加入 GetDlgItem(IDC_THUMB_1)->Invalidate();
走消息队列的。。
RedrawWindow看看