Could you tell me why?

解决方案 »

  1.   

    其实真正用什么方法都没有关系,只是我在使用隐藏窗口取背景,然后在显示窗口的时候发现,使用ShowWindow( SW_HIDE )需要Sleep( 50 ),才能真正得到背景画面,可能窗口的隐藏和显示需要时间,而这样会造成窗口的闪烁,因为我得到背景画面后还要进行Alpha混合的操作,也需要一段时间。
      

  2.   


    不可能。Win2K里面的所谓透明效果也只能是固定的,而不能随背景变化而变化。M$在自己的系统里都没实现,一般别人就更不可能做做到了! 
      

  3.   

    在WINDOW的栈中有这些东西,具体去查DIRECTX手册
      

  4.   

    在你窗口建立的时候先设置为隐藏的
    然后得到背景,建立一个内存DC 把背景保留到 DC 里面
    然后显示窗口
    这个方法一定行
      

  5.   

    不可能!!!!!!
    根据WINDOWS机理,当你的程序打开时,你程序背后就不会画了
      

  6.   

    在你的窗口打开之前先保存背景的设备描述表句柄,你说背景随时变换是不可能的,再被你窗口
    覆盖以后,被你覆盖的区域变成无效区域,windows是不会去画无效区域的,
      

  7.   


    解决部分问题要点(如果能解决的话. xixi ):
    1。star_chen(隆) 说的windows不会去画无效区域,但我们可以向窗口遮住的所有窗口发重画消息即可搞定。(最简单的是枚举所有窗体发消息,也免得判断遮住哪些窗体了)
    2。“使用ShowWindow( SW_HIDE )需要Sleep( 50 ),才能真正得到背景画面”,在这50之间,会发生闪烁,我想,如果你的窗体足够小,比如在操作截屏时,窗体类似于WinAmp那种小条条,又能放下足够的按钮,又小,是不需要50的吧。不过另外有个问题:由于你的窗口不停的show , hide , show , hide ,用户要操作你的程序,比如按按钮什么的,好像也是个麻烦事啊。很大的可能性是按到后面的窗体上了。
      

  8.   

    难!
    上钩子,截获gdi函数调用(方法见许多名为屏幕取词的贴子,个人以为截获个GetDC/ReleaseDC比较好),在每次调用GetDC就判断一下得到DC的ViewPort是不是在自己窗口底下,然后自己创建的一个兼容的MemDC给它乱画,画完在ReleaseDC时再贴回去(如果是在自己窗口底下,再顺便加点什么Alpha混合之类的)。最后顺便用MemDC更新一下自己保存的背景Bitmap。
    随便说说...
      

  9.   

    想要不隐藏本窗口,直接用屏幕DC应该是不可能的。我试过这样的:一个窗口在下面,上面有个对话框,我取窗口的CClientDC出来,取出它关联的位图,发现里面有个对话框。可见屏幕DC大家实际上共享一个。
    隐藏后Sleep(50)才能得到背景画面,我想是因为这样才能保证本进程挂起,别的进程被调度,进而处理重画消息,重画背景。否则可能从隐藏到重现一直是本进程在运行,别人没有机会重画。而Sleep好像最少50ms,所以本窗口再小也不能缩短时间。
    如果In355Hz(好象一条狗)说的用内存DC的办法能行,倒是不错。
      

  10.   

    zsb_xt(湘天) :够意思!下次一定好好说话
    好好帮你!