我有一个对话框,用来显示从服务器下载的图片,然后再在对话框的一个角落上用一个static控件的子类来显示视频,这样每次下载图片的时候,就会把视频控件遮盖住,为了能让static控件始终位于最上方,就把对话框属性 WS_CLIPCHILDREN设置为TRUE,不负责子控件绘制,但是这样static每次都不重绘,在对话框发生OnPaint的时候,static控件不重绘,就会出现重影的现象,我也重载了static子类的OnEraseBkgnd
BOOL CMyStatic::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
但是没效果。该如何解决这个问题呢?如果不设置WS_CLIPCHILDREN,如何让static在最上方呢?

解决方案 »

  1.   

    对static控件用
    InvalidateRect(&rect,true);刷新
      

  2.   

    用"编排"菜单使static的Order编号在图片控件之后
      

  3.   


    显示图片的时候,我不是用的图片控件,在对话框的OnPaint里面用GDI+绘制的。
      

  4.   


    1 调整视频控件的编号试试
    2 先用static控件背景色绘底色再绘新的内容
      

  5.   

    小鱼童鞋,
    OnEraseBkgnd Return TRUE;是不重绘吧。
      

  6.   

    再问下,
    WS_CLIPCHILDREN
    为了屏幕控件太多,不重绘,防止闪烁太厉害
    和你Static控件位置有什么关系?你应该自己处理WM_SIZE事件,把变化重新写进OnSize里面把
      

  7.   


    主要是用GDI+绘制的图片是一个矩形的,static控件在这个矩形的范围内(做成画中画的效果),这样每次绘制图片的时候,图片就把static遮挡住了,看不到static
      

  8.   

    那你GDI绘的时候,知道什么时候遮住它么?知道的话就Invalidate(TRUE)一下;让他重绘下罗?
      

  9.   

    对static控件用
    InvalidateRect(&rect,true);刷新
      

  10.   


    自己做了个 button,触发了InvalidateRect,但是static子控件没有重绘, 子控件设置了Notify属性。有关系吗?等会分不够再开个200分的帖子,大家来接分
      

  11.   


    恩,现在就是这样做的了,因为Dlg里面有很多业务,这样的话就要移到static控件类里面,工作量大啊。。不过还是想知道上面的答案,很多人说Invalidate 就可以了,但是我这样做没效果,不知道qq的画中画是怎么做成的?
      

  12.   

    Invalidate有时候无效的原因,是消息队列太忙了。RedrawWindow尝试过了么?
      

  13.   

    用对话框MoveWindow上去也挺好的,就是多一步要传指针来控制