Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VC6.0编程中如何仅使子窗体的客户区透明??

0 views
Skip to first unread message

杜晶

unread,
Dec 11, 2006, 11:37:00 PM12/11/06
to

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

v-ga...@prcvap.microsoft.com

unread,
Dec 13, 2006, 9:30:01 PM12/13/06
to
您好,

通常要使窗体的客户区透明方法有, 一种是您现在使用的SetLayeredWindowAttributes()函数,另一种是使用SetWindowRgn函数对应的CRgn进行裁减:

Transparent Window
http://www.codeguru.com/Cpp/misc/misc/graphics/article.php/c391

或使用一幅透明的位图作为窗体的背景。

至于窗口闪烁的问题,建议你分析一下您的程序,找出是那些窗口消息处理函数在重绘窗体,然后可以在这些消息处理函数直接返回,避免重绘。

谢谢!

Gary Chang

在线技术支持工程师
微软全球技术支持中心
---------------------------------------------------------------------------------------
我们的服务时间:周一至周五9:00-18:00(节假日除外)。我们将在两个工作日(48小时)内提供初始回应,并和您一起研究并解决问题。更多微软新闻组技术支持信息,请访问:http://support.microsoft.com/gp/newsgroupsupport/zh-cn.

回帖时,请在您的新闻组阅读器中使用“回复组(Reply to Group)”,这将帮助其他用户从您的提问中获益
---------------------------------------------------------------------------------------
本贴子以”现状”提供且没有任何担保,同时也没有授予任何权利。

杜晶

unread,
Dec 14, 2006, 1:05:02 AM12/14/06
to
Gary Chang:

在此先感谢您的回答!

对于SetWindowRgn的用法,以及RGN的用法和RECT的区别我还是不太了解,您能不能细致讲解一下,或者有没有描述这方面较好的文章和样例程序能提供给在下呢?

另外,我是要在ATL下做的控件里做一个除边框都可透显主窗体视频区域的子窗体,请问这种单单透明子窗体客户区域的情况是不是可以用SetWindowRgn函数来实现呢?而且在子窗被激活的时候我需要用自定义的颜色重绘子窗体的外边框,子窗体应该不会使父窗的视屏区域闪烁。
万分感谢,期待您再次指教。
--
杜晶


v-ga...@prcvap.microsoft.com”编写:

杜晶

unread,
Dec 14, 2006, 5:45:00 AM12/14/06
to
您好!
我看了您给这篇文章和代码:
http://www.codeguru.com/Cpp/misc/misc/graphics/article.php/c391
已经明白并成功了,真的很感谢您,谢谢啦!在此结贴。
这个新闻组真不错!学会很多东西。
--
杜晶


“杜晶”编写:

v-ga...@prcvap.microsoft.com

unread,
Dec 15, 2006, 2:45:52 AM12/15/06
to
非常感谢您的回复,很高兴能协助您解决问题。

祝您工作顺利!
0 new messages