Gtk 窗口,控件,设置(添加图片等)
// 创建顶层窗体,后面有POPUP的
GtkWidget *main_window;
main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); // 设置title文字,注意UTF8格式的文字转换,否则是乱码
gtk_window_set_title (GTK_WINDOW (main_window), g_locale_to_utf8("哈哈",-,NULL,NULL,NULL)); // 设置窗体图标,用这条语句使所有窗体使用同一个图标,也有独立设置(GTK手册)
gtk_window_set_default_icon_from_file( ICON_WNDICON, NULL); // 设置边框宽度,基本随意
gtk_container_set_border_width (GTK_CONTAINER (main_window), ); // 设置模式窗口
gtk_window_set_modal(GTK_WINDOW (window), TRUE); // 让窗口总在最前
gtk_window_set_keep_above(GTK_WINDOW (window), TRUE); // 移动窗口位置
gtk_window_move(GTK_WINDOW (window), left, top);
// 也是设置位置的,简单点
gtk_window_set_position(GTK_WINDOW (main_window), GTK_WIN_POS_CENTER); // 这个让叉叉无效
gtk_window_set_deletable(GTK_WINDOW (main_window), FALSE);
//a)简单一点就用这个。
gtk_window_maximize(GTK_WINDOW (main_window)); //b)下面这个有边框但都给挤到屏幕外面了
gtk_window_fullscreen( GTK_WINDOW(main_window));
//c)采用设置窗体大小等于screen大小的办法,就是麻烦点
GdkScreen *screen; screen = gtk_window_get_screen( GTK_WINDOW( main_window));
gtk_window_set_default_size( GTK_WINDOW( main_window),
gdk_screen_get_width(screen),
gdk_screen_get_height(screen));
gtk_window_set_resizable(GTK_WINDOW(main_window),FALSE);
//或
gtk_window_set_policy(GTK_WINDOW(main_window), FALSE, FALSE, TRUE);
//(a)点击叉叉
gint delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) g_signal_connect (G_OBJECT (main_window), "delete_event", G_CALLBACK (delete_event), NULL); //(b)窗口变化,gboolean返回TRUE就行了,继续执行默认过程,同下
gboolean window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer user_data) g_signal_connect (G_OBJECT (main_window), "window_state_event", G_CALLBACK (window_state_event), main_window);
//(c)点击别的窗口
gboolean focus_out_event(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) gtk_signal_connect (GTK_OBJECT(window), "focus-out-event", GTK_SIGNAL_FUNC(popuptoolbar_fout_event), window);
window = gtk_window_new(GTK_WINDOW_POPUP);
//用起来和这个差不多
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
GdkPixbuf *pixbuf;
GdkPixmap *pixmap; gtk_widget_set_app_paintable (main_window, TRUE);
gtk_widget_realize (main_window);
pixbuf = gdk_pixbuf_new_from_file (ICON_BGPIC, NULL);
gdk_pixbuf_render_pixmap_and_mask (pixbuf, &pixmap, NULL, );
gdk_window_set_back_pixmap (main_window->window, pixmap, FALSE);
g_object_unref (pixbuf);
g_object_unref (pixmap);
GdkPixbuf *pixbuf;
image = gtk_image_new_from_file (ICON_BGPIC);
pixbuf = gtk_image_get_pixbuf (GTK_IMAGE(image));
pixbuf = gdk_pixbuf_scale_simple(pixbuf,
gdk_screen_get_width(screen) - , // 16: window border SHIFT
gdk_screen_get_height(screen) - , // 140: height SHIFT
GDK_INTERP_BILINEAR);
gtk_image_set_from_pixbuf(GTK_IMAGE(image), pixbuf);
// 我放到fixed里了,这个随便
gtk_fixed_put(GTK_FIXED(fixed), image, , );
// 建立按钮
GtkWidget * button;
button = gtk_button_new (); // 简单一点的
button = gtk_button_new_with_label ("XX"); // 要产生那种能用键盘快捷键的按钮
button = gtk_button_new_with_mnemonic(g_locale_to_utf8("确定(_O)", -,NULL,NULL,NULL)); // 要好看一点就用一个图片的
// 函数产生一个hbox,然后把botton当作容器放进去,GTK的widget几乎都是容器,所以这个函数还是比较有用的,在产生toolbar的时候也用到。
GtkWidget * create_imagetext_hbox(const char *text,const char *image_path)
{
GtkWidget *box;
GtkWidget *label;
GtkWidget *image; image = gtk_image_new_from_file (image_path);
label = gtk_label_new (g_locale_to_utf8(text, -,NULL,NULL,NULL));
box = gtk_hbox_new (FALSE, );
gtk_container_set_border_width (GTK_CONTAINER (box), );
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, );
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, ); gtk_widget_showall (box);
return box;
}
GtkWidget * create_image_button(const char *text,const char *image_path)
{
GtkWidget * button;
GtkWidget *box; box = create_imagetext_hbox(text, image_path); button = gtk_button_new ();
gtk_container_add (GTK_CONTAINER (button), box);
gtk_widget_show (button);
return button;
} // clicked信号定义
void user_function (GtkButton *button, gpointer user_data)
// 建立entry
GtkWidget *entry;
entry = gtk_entry_new (); // 让entry显示****
gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); // 让entry直接响应回车
gtk_signal_connect (GTK_OBJECT(entry), "activate", GTK_SIGNAL_FUNC(enter_event), usrdata); // 读/写entry,读出的数据指针指向entry的widget内部,不能直接释放。
gchar *gtk_entry_get_text (GTK_ENTRY (entry))
gtk_entry_set_text (GTK_ENTRY (entry), "XX")
// 简单一点
label = gtk_label_new("XX"); // 让label接受键盘快捷键,并聚焦到某widget
label = gtk_label_new_with_mnemonic (g_locale_to_utf8("输入(_I)", -,NULL,NULL,NULL));
gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget); // 使用<span></span>控制显示
gtk_label_set_markup(GTK_LABEL(label), <span background='red'>"XXXX"</span>);
// -----------还有好多label用法,慢慢加
// 建立box
box = gtk_hbox_new (gboolean homogeneous, gint spacing);
// 或
box = gtk_vbox_new (gboolean homogeneous, gint spacing); homogeneous:TRUE,内部widget平均分配box空间,Widget大小不变,只是占地大了,其他地方padding;一般用FALSE即可,是否平均可在pack指定的widget时进行控制。
spacing:内部widget间的间隔,pixel单位。 // 结合gtk_container_set_border_width (GTK_CONTAINER (box), 8);效果也不错。 // Pack指定widget到box中
gtk_box_pack_start (GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding);
//或
gtk_box_pack_end (GTK_BOX (box), widget, FALSE, FALSE, );
X. treeview => LGX_storeview
lgx_storeview的说明和代码 X. toolbar X. calendar X. inputdialog
gtk_widget_set_usize(widget, x, y);
gtk_widget_set_sensitive(widget, FALSE);
2 gtk_misc_set_alignment(GTK_MISC(label), , ); 4 PangoFontDescription *fontdesc;
fontdesc = pango_font_description_from_string("uming 15");
6 gtk_widget_modify_font(treeview, fontdesc);
pango_font_description_free(fontdesc);
fontdesc = pango_font_description_from_string("uming");
pango_font_description_set_size (font_desc, *PANGO_SCALE);
widget->allocation.x
widget->allocation.y
widget->allocation.height
widget->allocation.width
Gtk 窗口,控件,设置(添加图片等)的更多相关文章
- 在RichTextBox控件中添加图片和文字
public void SetText(RichTextBox rtb) { rtb.Text = "在RichTextBox控件中添加图片和文字" + Environment.N ...
- Android控件上添加图片
项目中有一个点赞功能,点赞的小图标添加在点赞列表旁边,在xml里可以进行设置,也可以在代码中进行绘图. 下面是两种方法的设置: 1.xml里:一些控件:button.textView等等里面有个属性是 ...
- 基本控件设置边角图片 drawableleft
btn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_galley_comment, 0, 0,0); 四个参数分别是左上右下四个方向 ...
- swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...
- 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .
双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后 ...
- 对话框上动态控件的创建、在Picture Control控件上显示图片
1 MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控 ...
- PowerBuilder学习笔记之8.5高级窗口控件
1.列表框控件 列表框控件(ListBox).图片列表框控件(PictureListBox).下拉列表框控件(DropDownListBox)以及下拉图片列表框控件(DropDownPictureLi ...
- 在GridControl控件上绑定图片的几种操作方式
我们知道,基于DevExpress的开发Winform的项目界面的时候,GridControl控件是经常用来绑定数据的,一般以常规的字符内容为主,有时候也会有图片的显示需要,那么如果显示图片,我们应该 ...
- c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
随机推荐
- 计算属性(computed)、方法(methods)和侦听属性(watch)的区别与使用场景
1,computed 能实现的,methods 肯定也能够实现. 2,不同之处在于,computed 是基于他的依赖进行缓存的,computed 只有在他的的相关依赖发生改变的时候才会重新计算. 如果 ...
- Jersey入门——对Json的支持
Jersey rest接口对POJO的支持如下: package com.coshaho.learn.jersey; import java.net.URI; import javax.ws.rs.C ...
- Xfire基础
XFire 是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,能够快速地开发Web Service应用.和其他Web服务引擎相比,XF ...
- 2、在VM上的 CentOS 6.5 上安装mysql
1.查看系统是否安装了MySQL 使用命令: #rpm -qa | grep mysql 2.卸载已安装的MySQL 卸载mysql命令如下: #rpm -e - ...
- MVC模式、加密、jsonwebtoken
一.MVC模式(架构思想) M:model层,主要是数据的增删改查 V:view层,主要是视图的展示 C:controller层,主要负责业务逻辑 二.加密(md5加密.sha256加密)1.sha2 ...
- docker 常用操作
1,安装 .检查内核版本,必须是3.10及以上 uname ‐r .安装docker yum install docker .输入y确认安装 .启动docker [root@localhost ~]# ...
- eclipse 的版本及下载地址
eclipse 的各个版本号: 版本号 代号 代号名 发布日期 Eclipse 3.1 IO 木卫一,伊奥 2005 Eclipse 3.2 Callisto 木卫四,卡里斯托 2006 Eclips ...
- 基于ZooKeeper和Thrift构建动态RPC调用
一.基本功能 实现服务端向ZooKeeper集群注册自己提供的服务,并且把自己的IP地址和服务端口创建到具体的服务目录下.客户端向ZooKeeper集群监听自己关注的RPC服务(例如:sayHello ...
- neutron full stack
1. 通读一下 neutron的那个文档. 里面介绍了, db怎么隔离的, amqp怎么隔离的. 2. 记住文档中,那个full stack的图. 3. 走读代码 从TestOvsC ...
- 2018-2019-1 20189206 《Linux内核原理与分析》第五周作业
linux内核分析学习笔记 --第四章 系统调用的三层机制 学习重点--系统调用 用户态.内核态和中断 Intel x86 CPU有四种不同的执行级别,分别是0,1,2,3其中数字越小,特权越高. L ...