不透明的窗口就不会闪烁啊。如果你的窗口属于“GDI绘图”方式的窗口,并且有一定的“透明度”(Alpha特性)。
它在视频窗口(视频播放器一般是DX窗口)之上时,就会闪烁的。但不透明的窗口就不会闪烁。
这个恐怕无法去“避免”。

解决方案 »

  1.   

    怎么又说“不会闪烁”了……你的窗口在游戏窗口之上,有一定的透明度是没有闪烁,只能说明那个游戏是GDI绘图的,或者是GDI/DX混合模式。
    在刷新窗口时,没有用DX的屏幕缓冲翻转,而用的是GDI来刷新。
    否则,具有一定透明度的窗口,在它之上肯定会闪烁!如果你要想你的窗口在屏幕顶层,但又不接受鼠标事件(鼠标消息),可以把窗口的 .Enable设置为 False。
    或者,窗口 SetWindowLong( ),把 EXSTYLE 增加上 WS_EX_TRANSPARENT 标志位。
      

  2.   

    大哥想多了,不是做外挂的。我只不过想做个弹出窗口告诉正玩得High的小伙伴该回家了,不然妈妈骂。
    但是由于游戏FPS过高,导致我的弹出窗口闪的厉害,根本就看不见,不知道如何解决这个问题。
      

  3.   

    你的窗口不可能因为“游戏的FPS过高”而看不见的!
    除非你把你的程序窗口Setparent( )到游戏窗口中了。
    (这个有可能,但我没试过,现在也找不到合适的程序来验证是否是这样)。
    如果你的程序窗口是单独的“桌面窗口”,置顶后肯定看得见。
    我刚才找了几个DX的程序来测试,窗口置顶、设置半透明,是完全看得见的,也没闪烁。
    也试了在视频窗口之上时(KMPlayer ,DX渲染的),还是可见、不闪烁。
    今天测试时没出现闪烁,可能是跟电脑的配置有关吧,放一部电影、两个DX绘图的小程序、一个GDI绘图的程序,
    Chrome浏览器、挂2个Q号,还有另外几个程序等,用任务管理器看CPU占用率,才20%。
    以前用的那台电脑,配置比较低,放在视频窗口上,或者DX程序窗口之上,肯定闪烁。
    要说DX窗口的FPS,以我这台电脑的配置,那两个小程序的肯定都在200以上。你不想让你的窗口响应鼠标,可以试下我说的方法。
      

  4.   

    不管你最终是要干什么,这个需求所使用的技术是与外挂差不多的.这里有一个参考,你可以看看,就是我前面所说的方案,只不过这里使用一个DLL来搞定,更方便些:在DirectX下弹出对话框
      

  5.   

    谢谢myjian提供的方法和Chen8013的热情帮助。
    myjian的方法是可行的。