QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1390|回复: 16

关于窗口透明的编程问题的讨论!(解决方案)

[复制链接]
发表于 2003-7-11 12:13:22 | 显示全部楼层 |阅读模式
我没有找到具体的解决方法,我的gtk也是刚入门,我发信问了gdeskcal的作者

他的回答是这样的在X11下是无法直接得到透明效果的,只有通过截桌面背景作窗口背景。

他的回答是这样的:

First of all, windows cannot be transparent under X11. You have to
create the illusion of transparency by copying the covered part of the
background image into your window.

The XAtom _XROOTPMAP_ID on the root window contains the XID of the
background pixmap.
You have to read the XID and get access to the pixmap with
gdk_pixmap_foreign_new(xid).
Then you just copy the part that is covered into your window and
that's it. This part may be tricky because you have to handle the
cases when the pixmap is tiled over the desktop, or the pixmap being
smaller than your window.
The function get_wallpaper() in desktop.py shows how I solved the
tiling problem finally.[/code]
发表于 2003-7-11 12:49:53 | 显示全部楼层
有够麻烦的
回复

使用道具 举报

 楼主| 发表于 2003-7-11 12:59:39 | 显示全部楼层
我刚学gtk,高位高手能不能把他的意思说的明白点?
回复

使用道具 举报

发表于 2003-7-11 13:14:23 | 显示全部楼层
它的意思就是你从根窗口的XAtom _XROOTPMAP_ID里可以得到当前桌面的pixmap(应该是类似桌面切换的图表显示的方法) 然后用gdk_pixmap_foreign_new(xid). 的到pixmap的访问
然后你需要截取你的窗口所覆盖的那一部分来何你的窗口合成(不知道怎么实现) 但如果桌面的pixmap是tile排列的,你需要计算它的复制情况(只对左面?那别的窗口的透明显示怎么搞得?)
最后 推荐你看get_wallpaper() 它是怎么解决这个问题的

但是这个回答好像只涉及了对桌面的透明效果的制作 而不是对于别的窗口的透明效果啊??
回复

使用道具 举报

 楼主| 发表于 2003-7-11 14:34:40 | 显示全部楼层
仁兄,我就是想了解一下你那个"不知道怎么实现"地方是怎么实现的,不要具体代码,只要大概介绍就可以了
回复

使用道具 举报

发表于 2003-7-11 15:10:50 | 显示全部楼层
我见过一些有透明功能的程序,他们只是把背景图片画在窗口里,没有桌面图标,没有下方窗口,非常傻。
你那段英文可能就是这个意思,如果x11没有提供函数,实现真正的透明可能很困难
回复

使用道具 举报

 楼主| 发表于 2003-7-11 15:29:07 | 显示全部楼层
那改成用printscreen得到的图片是不是好看很多?
回复

使用道具 举报

发表于 2003-7-11 16:52:25 | 显示全部楼层
printscreen? 有这个函数么?
至于半透明的算法 我可以很准确的告诉你 在任何一本数字图像处理书上都有
不过鄙人没有好好学习 当时作业写过一个模糊算法100x100图像最高纪录是1.5个小时算完......
回复

使用道具 举报

发表于 2003-7-11 17:06:24 | 显示全部楼层
想根治就用directFB吧
回复

使用道具 举报

发表于 2003-7-11 18:29:34 | 显示全部楼层
gtk直接就能实现透明gtk_widget_shape_combine_mask
回复

使用道具 举报

 楼主| 发表于 2003-7-12 09:44:46 | 显示全部楼层
我要去看看了! 谢谢!
回复

使用道具 举报

发表于 2003-7-12 10:04:39 | 显示全部楼层
在Gtk的示例程序中就有一個手推車的程序,可以看看它是怎麼實現的.
回复

使用道具 举报

 楼主| 发表于 2003-7-12 10:07:31 | 显示全部楼层
whlvme, 真的? 是他的document的实例,还是gtk本身自带的实例??
回复

使用道具 举报

发表于 2003-7-12 13:16:14 | 显示全部楼层
你找一下吧。我記不清了。我以前看過,好象就是調用的gtk_widget_shape_combine_mask
回复

使用道具 举报

 楼主| 发表于 2003-7-12 14:14:15 | 显示全部楼层
谢谢,我已经找到了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 10:59 , Processed in 0.072235 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表