要做一个类似于QQ截屏的功能,截取的部分都已经做完,但是出现一个问题
在按下某一个按钮之后,本窗口Hide,然后,我需要先截取全部的桌面
问题是,Hide之后,背景的刷新不够快,经常跟不上程序流上 下一个截取的动作60%左右情况截取到的东西能看到原窗口还没Hide
30%能看到原窗口擦除之后背后窗口的更新到一半的场景
10%能看到背后窗口已经全部画完成简单的用Application.ProcessMessage,无用
试着用InvalidateRgn更新整个桌面,无用
Sleep(50),很有效,但这方法也太不好看了,若是在性能不同的机器上运行,很可能还是会有问题
应该如何实现呢?

解决方案 »

  1.   

    那用一个TTimer来设置,设置为一秒后再截取
      

  2.   

    楼上,这和用Sleep有区别么?
    和用Sleep还是有一样的问题
      

  3.   

    self.DoubleBuffered :=true;  
    你试试
      

  4.   

    简单的Refresh,RedrawWindow,InvalidateRgn我都试过了
    这些可以不用再提的了
      

  5.   

    用时钟的话肯定是可以的,只是你不知道hide窗口,需要多少时间,最烂的方法就是把时钟控件的time时长设长一点啦
      

  6.   

    这个...等Timeout的方法可不可以也不要再提了呢?
    如果我会采用这个方法,那么我为什么又要来发帖呢?
    我开帖就讲了这个方法的问题了
    不同的机器性能,不同的背后所要重绘的Rect数目,都会有相差甚远的时间需要,全部取最大是不可行的方法
      

  7.   

    截屏代码放到OnHide里试试
    如果还不行则把截屏代码放到单独函数中
    然后在OnHide的地方Post自己一个自定义消息,在这个消息里调用截屏函数
      

  8.   

    放到OnHide
    测试结果可以百分之百的截到还没有Hide的Self窗体
    OnHide的效果是在Hide前一刻发生的自定义消息的效果同样不起作用
    因为在OnHide里面加自定义消息,估计消息队列里顺序是这样的
    Hide消息
    WM_USER
    背景刷新消息
      

  9.   

    这就要SendMessage
    就是让给定的HANDLE在你给定的HDC上画
    消息名称忘了,你找一下!