1、关于窗口
 
     // 创建顶层窗体,后面有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);
    POPUP窗口也不错,而且不会在任务栏出现。
     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);
    对一部分区域设背景图,这个办法比较随意也简单,麻烦一点的地方是需要先做个计算,screen在前面有获得办法。
    同时有说到一个图片缩放的办法。

     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, , );
 
 
   2、关于按钮
 

     // 建立按钮
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)

   3、关于entry
 

     // 建立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")
 
   4、关于label

  // 简单一点
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用法,慢慢加
 
   5、BOX参数小记
     // 建立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, );
 
    expand:TRUE,对所有TRUE参数打包进来的widget平均分配box中剩余的空间,但并不填充,仍保持widget原大小。
    fill:TRUE,只有在expand为TRUE时有效,widget改变大小填充满其在box中占有的空间。
    padding:widget与他后面的控件的间隔,pixel单位,最后一个widget将作为与box边缘的间隔。
 
    box其乐无穷呀!
 
   X、封装的代码
    虽然丧失了一定的随意性,但是平常也就这些应用了。
     X. treeview => LGX_storeview
lgx_storeview的说明和代码 X. toolbar X. calendar X. inputdialog
  
 Y、Widget的一些常用方法
 
    Y.1、设定大小
       gtk_widget_set_usize(widget, x, y);
 
    Y.2、使其“变灰色”
   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);
 
   Z、其他小技巧
 
    Z.1 获得widget的上下左右

   widget->allocation.x
  widget->allocation.y
  widget->allocation.height
  widget->allocation.width
 
 

Gtk 窗口,控件,设置(添加图片等)的更多相关文章

  1. 在RichTextBox控件中添加图片和文字

    public void SetText(RichTextBox rtb) { rtb.Text = "在RichTextBox控件中添加图片和文字" + Environment.N ...

  2. Android控件上添加图片

    项目中有一个点赞功能,点赞的小图标添加在点赞列表旁边,在xml里可以进行设置,也可以在代码中进行绘图. 下面是两种方法的设置: 1.xml里:一些控件:button.textView等等里面有个属性是 ...

  3. 基本控件设置边角图片 drawableleft

    btn.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_galley_comment, 0, 0,0); 四个参数分别是左上右下四个方向 ...

  4. swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)

    swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...

  5. 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .

    双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后 ...

  6. 对话框上动态控件的创建、在Picture Control控件上显示图片

    1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控 ...

  7. PowerBuilder学习笔记之8.5高级窗口控件

    1.列表框控件 列表框控件(ListBox).图片列表框控件(PictureListBox).下拉列表框控件(DropDownListBox)以及下拉图片列表框控件(DropDownPictureLi ...

  8. 在GridControl控件上绑定图片的几种操作方式

    我们知道,基于DevExpress的开发Winform的项目界面的时候,GridControl控件是经常用来绑定数据的,一般以常规的字符内容为主,有时候也会有图片的显示需要,那么如果显示图片,我们应该 ...

  9. c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局

    使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...

  10. firefox扩展开发(二):用XUL创建窗口控件

    firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...

随机推荐

  1. Win7 Python开发环境搭建

    1.  下载Anaconda并安装 地址: https://www.anaconda.com/download/ Anaconda包括Python基础包与一系列科学计算包,安装后不用再单独安装Pyth ...

  2. 微信小程序制作家庭记账本之三

    第三天,学习别人的代码,了解到wxml跟JAVAWEB中的JSP差不太多,可以形成整个页面的轮廓.wxss对每个文本框按钮进行大小颜色修饰.json的作用很是迷惑,也不清楚各种文件是怎样相互作用的.

  3. 利用iOS中Safari浏览器创建伪Web App

    在safari浏览器里有一个“添加到主屏幕”选项,我们可以用来创建伪Web App,下面来了解一下iOS中Safari的私有属性 第一步设置Web App的主屏幕图标: 有两种属性值apple-tou ...

  4. bzoj1594 Pku3764 The xor-longest Path

    题目链接 先求每个点到根的异或和 然后就要找出两个点,使dis[a]^dis[b]最大 注意异或的性质,我们可以用trie树,沿着与当前数字每位的相反方向走 #include<algorithm ...

  5. <转>jmeter(一)基础介绍

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  6. 大数据自学3-Windows客户端DbVisualizer/SQuirreL配置连接hive

    前面已经学习了将数据从Sql Server导入到Hive DB,并在Hue的Web界面可以查询,接下来是配置客户端工具直接连Hive数据库,常用的有DbVisualizer.SQuirreL SQL ...

  7. ubuntu 18.04下安装配置HBase问题记录

    参考资料: Ubuntu下HBase安装与使用(shell+Java API) 问题 无法正常启动hbase,在Log里报错java.lang.ClassNotFoundException: org. ...

  8. MyEclipse/Eclipse快捷键总结

    MyEclipse/Eclipse快捷键 查找某个方法被谁调用:选中方法名,ctrl+shift+g 通过文件名称查找类或文件:ctrl+shift+r(Open Resource)

  9. spring(读取外部数据库配置信息、基于注解管理bean、DI)

    ###解析外部配置文件在resources文件夹下,新建db.properties(和数据库连接相关的信息) driverClassName=com.mysql.jdbc.Driverurl=jdbc ...

  10. 在static的function静态函数中访问成员变量

    class A{ private $url; public function __construct(){ $this->url = $_SERVER['PATCH_INFO']; } publ ...