一个主对话框上应用了皮肤控件,结果在主对话框上直接显示图片会看不见,现在在主对话框上添加了两个子对话框,用来显示图片,显示图片是在OnPaint()函数里画的,但是在点击打开图片按钮的时候,另一幅打开的图片会不显示,而且在拖动的时候,当图片被遮住了,被遮挡部分就不能恢复,可是把主对话框最小化,再恢复,则图片就会显示.有没有高手帮着指点一下,难道只有用定时器才可以解决?

解决方案 »

  1.   

    把显示图片放在 WM_ERASEBKGND 试试看
      

  2.   

    擦除背景,在 classwizard里没有这个消息啊?怎么添加?感觉上好像能解决,可是点击重新打开图片按钮,要把图片擦除怎么办?
      

  3.   

    根据你的叙述:
    "...挡部分就不能恢复,可是把主对话框最小化,再恢复,则图片就会显示"你需要在上述你的操作后添加 
    InvalidateRect(NULL,TRUE);
      

  4.   

    InvalidateRect(...,FALSE);也可。
      

  5.   

    对,InvalidateRect这个函数可以促使窗口的某些部分无效,形成重画操作!
      

  6.   

    当窗口被其他窗口挡住再显示,系统会发 WM_PAINT 消息,
    并且再 CDC 中传入 要更新的区域大小。当你要手动更新的时候,要调用 INVALIDATE OR INVALIDATERECT()
    系统会将它的 CDC 标志为 dirty ,再下一个 WM_PAINT要求来的时候,
    一起更新,
    如果想快点,调用 UPDATEWINDOW()
      

  7.   

    WM_ERASEBKGND
    选中窗口类,右键,Add Windows Message Handler, 把Dialog 改成WINDOWS
      

  8.   

    我用的是,用InvalidateRect来刷新区域。
    效果可以
      

  9.   

    谢谢大家,不过InvalidateRect我用了,不管用,这才问的,发现是在响应后一个图片显示窗口的Onpaint()的时候,不能够同时响应前一个图片窗口的Onpaint()。当把前一个窗口的InvalidateRect,添加到后一个窗口的ONPaint()的时候,前一个窗口是可以显示了。不过这时,当只有前一个窗口图片被遮住,图片不能自动恢复,只有在后一个窗口的图片被遮住时,前一个窗口的图片才能恢复。这说明当按打开后一个图片的按钮显示图片的时候,这时前一个窗口图片被遮住,就不能响应前一个图片显示窗口OnPaint()了,不知道大家遇到过这种问题没有,奇怪?有点乱,不知道大家能不能看明白啊
      

  10.   

    to AIDI3    这个类是从CDialog派生出来的,右键没有Add Windows Message Handler选项。