none
最近用VC6做ATL开发时遇见一个问题 RRS feed

  • 问题

  • 最近用VC6做ATL开发时遇见一个问题:主窗体中使用Directshow播放视频(使用VMR的Windowless模式),想在主窗体之上叠一个只显示边框的子窗体,可以透视主窗体的视频内容。使用SetLayeredWindowAttributes()函数可以使主窗体透明,但好像无法让子窗体透明,而且另一主窗体透明后层叠在视频窗体上时,透明窗体会闪烁的很厉害,CPU占用也很大。请高手指教有没有好的方法实现我想要的功能。要求视频主窗体不透明,透明子窗体叠加上去的时候可以做任何窗体操作且不能闪烁。谢谢!

     

    2007年8月3日 3:02

答案

  • 通常要使窗体的客户区透明方法有, 一种是您现在使用的SetLayeredWindowAttributes()函数,另一种是使用SetWindowRgn函数对应的CRgn进行裁减:Transparent Window
    http://www.codeguru.com/Cpp/misc/misc/graphics/article.php/c391

    或使用一幅透明的位图作为窗体的背景。至于窗口闪烁的问题,建议你分析一下您的程序,找出是那些窗口消息处理函数在重绘窗体,然后可以在这些消息处理函数直接返回,避免重绘。

    2007年8月3日 3:12