gtk+如何实现弹出式窗口
本帖最后由 shaohao 于 2010-11-24 23:57 编辑
我想设计一个图像按钮。
当按钮点击下以后,在按钮的下方显示一个iconview(好像这样的话,这个iconview只能放置在一个新的window里面了). 选择icon以后,按钮的图像自动更新。
本来想用popupmenu,也可以,但是发现我不知道如何让弹出的菜单(或窗口)正好放置在按钮的下方。
比如弹出式菜单,好像只能显示在触发点击操作的鼠标的位置上。
如何才能正好显示在某个控件的旁边(下方)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
同问~
谢谢。
复制代码gtk 2.18以下的版本没有 gtk_widget_get_allocation这个函数。而gtk 2.18以上的版本中 GtkWidget数据结构中 allocation成员隐藏了,不能通过 GTK_WIDGET(widget)->allocation的方式访问。
上面代码的意思是判断以下当前使用的gtk的版本,而采取不不同的方法获取 widget的allocation
回复 2# nketc
我看到你的程序里面有这行代码:
#if GTK_MINOR_VERSION < 18
这个宏GTK_MINOR_VERSION 是干什么用的?
#define GTK_MAJOR_VERSION (2)
#define GTK_MINOR_VERSION (16)
#define GTK_MICRO_VERSION (6)
#define GTK_BINARY_AGE (1606)
#define GTK_INTERFACE_AGE (6)
可以通过allocation获取widget在其gdk window中的位置,然后加上这个gdk window在其父window中的位置,再依次加上在父window中的位子,就可以计算出widget在屏幕上的位置,之后lz的问题就解决了吧。
只是需要注意,在gtk 2.18 版本之前可以通过 widget->allocation直接获取,但从 2.18开始一些数据结构都隐藏了,需要 gtk_widget_get_allocation获取。
闲着蛋疼,随便写了个例子:
复制代码