- 请问在这种情况下能运行GTK+编写的程序吗?谢谢!
- qt4.4怎样才能显示中文
- windows环境的Gtk与Gtkmm环境建立
- aix 5L中怎么安装libgtk.so和libgdt.so两个文件?
- GTK+在windows上太丑了,不能忍
- 急!修改gdm源码,能用root自动登录,请高手指点!!!
- gtk2.0 + socket编程求教 内有代码
- gtk 菜单问题
- 一个小问题:如何知道GTK的版本?
- qt的activex程序,编译无法找到idl文件
- 用QT怎样实现位图自适应屏幕分辨率?
- 专门的wxWidget社区
- 使用gtk+为界面程序基础,在嵌入式Linux领域适用么?
- 如何设置label中的字体大小?
- MinGW
- 为arora浏览器添加了简体中文翻译文件
- 用QT设计的对话框如何修改标题的字体
- wxPython关于图形显示的问题
- 关于gtk 灵活显示图片的困惑,附上代码
- 哪儿有安装libgtk-x11-2.0.so.0的包
2007-9-20 14:39AllenYao
GTK下如何编程实现带透明图片的按钮?
我刚学GTK编程,想把一张PNG图片变成一个按钮。
我首先生成了一个窗体,并且贴了一张背景图。然后又在窗体上面添加了一张小的PNG图片,想把它做成按钮,不知道做能才背景显示出来。虽然可以使用eventbox让图片接收事件,但是加了eventbox之后,图片的背景就变成灰色了,本来这个PNG图片背景是透明的。如下图所示,“1”是在按钮上按PNG图片,“A”是PNG图片加eventbox,都达不到背景透明的效果。
[ 本帖最后由 AllenYao 于 2007-9-20 14:49 编辑 ]
我刚学GTK编程,想把一张PNG图片变成一个按钮。
我首先生成了一个窗体,并且贴了一张背景图。然后又在窗体上面添加了一张小的PNG图片,想把它做成按钮,不知道做能才背景显示出来。虽然可以使用eventbox让图片接收事件,但是加了eventbox之后,图片的背景就变成灰色了,本来这个PNG图片背景是透明的。如下图所示,“1”是在按钮上按PNG图片,“A”是PNG图片加eventbox,都达不到背景透明的效果。
[ 本帖最后由 AllenYao 于 2007-9-20 14:49 编辑 ]
2007-10-14 00:53pilgrim_kevin
我想起码需要libpng的支持。具体不了解。
2007-10-16 00:16whyglinux
一种可行的实现方式是这样的:直接在背景上透明显示图片,划定围绕图片周围的一片矩形(或者其它形状)区域为“按钮”范围。所有的事件不是由按钮本身处理,而是交给背景所在的窗口处理。比如,模拟按钮的动作(如鼠标经过时的强调显示、按钮按下时的状态改变、输入焦点处理等)都需要通过其父窗口的事件处理自己来实现。
2007-11-8 15:02doonething
gtk 貌似不支持半透明的,都是rgb加alpha通道的,
你可以搜索 gnome支持半透明菜单 .以前遇到过,
不过好像很麻烦的,
你可以搜索 gnome支持半透明菜单 .以前遇到过,
不过好像很麻烦的,
2007-11-9 00:28moyihua
回复 #1 AllenYao 的帖子
可以这样的:
在你用“A是PNG图片加eventbox”的基础上
显示前加一句 gtk_widget_shape_combine_mask()
就可以了。
可以这样的:
在你用“A是PNG图片加eventbox”的基础上
显示前加一句 gtk_widget_shape_combine_mask()
就可以了。
2007-11-9 04:16moyihua
回复 #1 AllenYao 的帖子
我在red hat linux 9 gtk+1.2下实现了:
用LZ提到的第二中方法:PNG图片加eventbox
但记住要刷新一次,就行了:
先把原来的数据删除,再填上去,就可以透明了。
//////刷新方法如下
GdkPixmap * gdk_pixmap1 = NULL;
GdkBitmap * mask1;
GtkWidget * pixmap1 =NULL;
GtkWidget *eventbox1;
void chang_button()
{
GtkWidget *oldImage;
GtkWidget *newImage;
GdkBitmap * newMask;
//备份一下原来的
oldImage=GTK_WIDGET(gtk_container_children(GTK_CONTAINER(eventbox1))->data);
newImage=oldImage;
gtk_object_ref( GTK_OBJECT(oldImage) );
//删除
gtk_container_remove(GTK_CONTAINER(eventbox1), oldImage);
//从新加入
gtk_container_add(GTK_CONTAINER(eventbox1), newImage);
//去边框
gtk_widget_shape_combine_mask( eventbox1, mask1, 0, 0 );
//显示
gtk_widget_show(newImage);
}
我在red hat linux 9 gtk+1.2下实现了:
用LZ提到的第二中方法:PNG图片加eventbox
但记住要刷新一次,就行了:
先把原来的数据删除,再填上去,就可以透明了。
//////刷新方法如下
GdkPixmap * gdk_pixmap1 = NULL;
GdkBitmap * mask1;
GtkWidget * pixmap1 =NULL;
GtkWidget *eventbox1;
void chang_button()
{
GtkWidget *oldImage;
GtkWidget *newImage;
GdkBitmap * newMask;
//备份一下原来的
oldImage=GTK_WIDGET(gtk_container_children(GTK_CONTAINER(eventbox1))->data);
newImage=oldImage;
gtk_object_ref( GTK_OBJECT(oldImage) );
//删除
gtk_container_remove(GTK_CONTAINER(eventbox1), oldImage);
//从新加入
gtk_container_add(GTK_CONTAINER(eventbox1), newImage);
//去边框
gtk_widget_shape_combine_mask( eventbox1, mask1, 0, 0 );
//显示
gtk_widget_show(newImage);
}
2007-11-11 14:25whyglinux
|
对,应该这样实现比较简单。
本文来自:百家学院 (http://www.9php.com),更多请参考以上网站.
·上一篇:已经没有了 · 下一篇:关于Z5500解码器的问题!!

