//`pkg-config --cflags --libs gtk+-2.0` //编译标志 #include //头文件 int main(int argc,char *argv[]) //主函数 { gtk_init(&argc,&argv[]); GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL); //有边框 GTK_WINDOW_POPUP //无边框 //控件操作 gtk_widget_show(window); gtk_main(); return 0; } void gtk_window_set_title(GtkWindow *window,const gchar *title); //窗口标题 void gtk_widget_set_size_request(GtkWidget *widget,gint width,gint height); //窗口最小大小 void gtk_window_set_resizable(GtkWindow *window,gboolean resizable); //窗口伸缩 void gtk_window_set_position(GtkWindow *window,GtkWindowPosition position); //窗口位置 GTK_WIN_POS_NONE GTK_WIN_POS_CENTER GTK_WIN_POS_MOUSE GTK_WIN_POS_CENTER_ALWAYS GdkPixbuf *gdk_pixbuf_new_from_file(const gchar *filename,GError **error); //创建图片资源 NULL GdkPixbuf *gdk_pixbuf_scale_simple(const GdkPixbuf *src,int dest_width,int dest_height,GdkInterpType interp_type); //设置图片大小 GDK_INTERP_BILINEAR void g_object_unref(GtkObject *object); //释放资源 GtkWidget *gtk_image_new_from_pixbuf(GdkPixbuf *pixbuf); //通过资源创建图片控件 void gtk_image_set_from_pixbuf(GtkImage *image,GdkPixbuf *pixbuf); //设置图片控件图片 void gtk_image_clear(GtkImage *image); //清除图像控件里的图像数据 GtkWidget *gtk_button_new_with_lable(const gcahr *label); //创建带内容按钮 void gtk_button_set_label(GtkButton *button,const gchar *label); //设置按钮标签 const gchar *gtk_button_get_label(GtkButton *button); //获取按钮标签 void gtk_widget_set_sensitive(GtkWidget *widget,gboolean sensitive); //按钮使能 void gtk_button_set_image(GtkButton *button,GtkWidget *image); //设置按钮图片 void gtk_button_set_relief(GtkButton *button,GtkReliefStyle newstyle); //按钮透明度 GTK_RELIEF_NONE //按钮透明 void gtk_container_add(GtkContainer *container,GtkWidget *widget); //容器附加控件 gulong g_signal_connect(gpointer instance,const gchar *detailed_signal,GCallback c_handler,gpointer data); //信号连接回调 GtkWidget *gtk_hbox_new(gboolean homogeneous,gint spacing); //水平布局 GtkWidget *gtk_vbox_new(gboolean homogeneous,gint spacing); //垂直布局 GtkWidget *gtk_label_new(cost gchar *str); //创建标签 void gtk_label_set_text(GtkLabel *label,const gchar *str); //设置标签内容 const gchar *gtk_label_get_label(GtkLabel *label); //获取标签内容 GtkWidget *gtk_table_new(guint rows,guint columns,gboolean homogeneous); //表格布局 void gtk_table_attach_defaults(GtkTable *table,GtkWidget *widget,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach); //表格布局附加控件 GtkWidget *gtk_fixed_new(); //固定布局 void gtk_fixed_put(GtkFixed *fixed,GtkWidget *widget,gint x,gint y); //固定布局附加控件 GtkWidget *gtk_entry_new(void); //行编辑 gtk_entry_set_visibility(GtkEntry *entry,gboolean visible); //行编辑显示 const gchar *gtk_entry_get_text(GtkEngry *entry); //获取行编辑内容 void gtk_entry_set_text(GtkEngry *entry,const gchar *text); //设置行编辑内容 "activate" //行编辑触发信号 GtkWidget *gtk_process_bar_new(); //进度条 void gtk_process_bar_set_fraction(GtkProgressBar *pbar,gdouble fraction); //设置进度条百分比 void gtk_process_bar_set_text(GtkProgressBar *pbar,gchar *text); //设置滑槽文本显示 void gtk_progress_bar_set_orientation(GtkProgressBar *pbar,GtkProgressBarOrientation orientation); //设置进度条移动方向 GTK_PROGRESS_LEFT_TO_RIGHT GTK_PROGRESS_RIGHT_TO_LEFT GTK_PROGRESS_BOTTOM_TO_TOP GTK_PROGRESS_TOP_TO_BOTTOM GtkWidget *gtk_scrolled_window_new(GtkAdjustment *hadjustment,GtkAdjustment *vadjustment); //滚动窗口 NULL NULL void gtk_scolled_window_set_policy(GtkScolledWindow *scrolled_window,GtkPolicyTypehscrollbar_policy,GtkPolicyType vscrollbar_policy); //滚动条出现的方式 GTK_POLICY_AUTOMATIC GTK_POLICY_ALWAYS GTK_POLICY_NEVER GtkWidget *gtk_clist_new_with_titles(gint columns,gchar *titles[]); //创建列表 void gtk_clist_set_column_width(GtkCList *clist,gint column,gint width); //设置列宽 void gtk_clist_set_column_justification(GtkCList *clist,gint column,GtkJustification justification); //对齐方式 GTK_JUSTIFY_LEFT GTK_JUSTIFY_RIGHT GTK_JUSTIFY_CENTER GTK_JUSTIFY_CENTER gint gtk_clist_append(GtkCList *clist,gchar *text[]); //列表添加行 void gtk_clist_clear(GtkCList *clist); //清空列表所有行 gint gtk_clist_get_text(GtkCList *clist,gint row,gint column,gchar **text); //获取某行某列内容 "select_row" //列表行出发信号 guint g_timeout_add(guint interval,GSourceFunc function,gpointer data); //创建定时器 gboolean g_source_remove(guint tag); //移除定时器 void gtk_widget_add_events(GtkWidget *widget,gint events); //控件捕获事件 GDK_BUTTON_PRESS_MASK GDK_BUTTON_RELEASE_MASK GDK_BUTTON_MOTION_MASK GDK_KEY_PRESS_MASK GDK_ENTER_NOTIFY_MASK "button_press_event" //鼠标点击事件信号 "button_release_event" //鼠标释放事件信号 gboolean callback(GtkWidget *widget,GdkEventButton *event,gpointer data); //鼠标点击事件回调 event->x,event->y //获取点击坐标值 event->button //1左键,2中键,3右键 event->type //双击GDK_2BUTTON_PRESS return TRUE; "motion_notify_event" //鼠标移动事件信号 gboolean callback(GtkWidget *widget,GdkEventMotion *event,gpointer data); //鼠标移动事件回调 event->x,event->y //获取移动坐标值 return TRUE; "key_press_event" //键盘按下事件的信号 "key_release_event" //键盘释放事件的信号 gboolean callback(GtkWidget *widget,GdkEventKey *event,gpointer data); //键盘按下事件回调 event->keyval //获取键值 return TRUE; "expose_event" //曝光事件信号 gboolean callback(GtkWidget *widget,GdkEventExpose *event,gpointer data); //曝光事件回调 return FALSE; #include //Cairo绘图头文件 void gtk_widget_set_app_paintable(GtkWidgte *widget,gboolean app_paintable); //允许窗口绘图 cairo_t *gtk_cairo_create(GdkDrawable *drawable); //创建Cairo环境 drawable->window void cairo_destroy(cairo_t *cr); //回收资源 void cairo_set_line_width(cairo_t *cr,double width); //设置线宽 void cairo_set_source_rgb(cairo_t *cr,double r,double g,double b); //设置颜色,r,g,b从0.0到1.0 void cairo_move_to(cairo_t *cr,double x,double y); //设置直线起点 void cairo_line_to(cairo_t *cr,double x,double y); //设置直线终点 void cairo_rectangle(cairo_t *cr,double x,double y,double width,double height); //设置矩形路径 void cairo_stroke(cairo_t *cr); //绘制cairo void cairo_fill(cairo_t *cr); //填充cairo闭合路径 void cairo_select_font_face(cairo_t *cr,const char *family,cairo_font_slant_t slant,cairo_font_weight_t weight); 字体 倾斜 加粗 void cairo_set_font_size(cairo_t *cr,double size); //设置字体大小 void cairo_show_text(cairo_t *cr,const char *utf8); //显示字符串 gdk_cairo_set_source_pixbuf(cairo_t *cr,const GdkPixbuf *pixbuf,double pixbuf_x,double pixbuf_y); //设置画图图片 void cairo_paint(cairo_t *cr); //绘制图片 void gtk_widget_queue_draw(GtkWidget *widget); //刷新绘图区域 void gtk_thread_init(void) //gtk创建线程前调用/*{{{*/ { if(FALSE == g_thread_supported()) { g_thread_init(NULL); } gdk_threads_init(); }/*}}}*/ void *pthread_fun(void *data) //线程函数中操作界面需要封装/*{{{*/ { gdk_threads_enter(); //一个或多个界面操作函数 gdk_threads_leave(); }/*}}}*/ /* 功能: 设置背景图 * widget: 主窗口 * w, h: 图片的大小 * path: 图片路径 */ static void chang_background(GtkWidget *widget, int w, int h, const gchar *path)/*{{{*/ { gtk_widget_set_app_paintable(widget, TRUE); //允许窗口可以绘图 gtk_widget_realize(widget); /* 更改背景图时,图片会重叠 * 这时要手动调用下面的函数,让窗口绘图区域失效,产生窗口重绘制事件(即 expose 事件)。 */ gtk_widget_queue_draw(widget); GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(path, NULL); // 创建图片资源对象 // w, h是指定图片的宽度和高度 GdkPixbuf *dst_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR); GdkPixmap *pixmap = NULL; /* 创建pixmap图像; * NULL:不需要蒙版; * 123: 0~255,透明到不透明 */ gdk_pixbuf_render_pixmap_and_mask(dst_pixbuf, &pixmap, NULL, 128); // 通过pixmap给widget设置一张背景图,最后一个参数必须为: FASLE gdk_window_set_back_pixmap(widget->window, pixmap, FALSE); // 释放资源 g_object_unref(src_pixbuf); g_object_unref(dst_pixbuf); g_object_unref(pixmap); }/*}}}*/ /* 功能: 设置控件字体大小 * widget: 需要改变字体的控件 * size: 字体大小 * is_button: TRUE代表控件为按钮,FALSE为其它控件 */ static void set_widget_font_size(GtkWidget *widget, int size, gboolean is_button)/*{{{*/ { GtkWidget *labelChild; PangoFontDescription *font; gint fontSize = size; font = pango_font_description_from_string("Sans"); //"Sans"字体名 pango_font_description_set_size(font, fontSize*PANGO_SCALE);//设置字体大小 if(is_button){ labelChild = gtk_bin_get_child(GTK_BIN(widget));//取出GtkButton里的label }else{ labelChild = widget; } //设置label的字体,这样这个GtkButton上面显示的字体就变了 gtk_widget_modify_font(GTK_WIDGET(labelChild), font); pango_font_description_free(font); }/*}}}*/ // 给创建好的image重新设计一张图片 void load_image(GtkWidget *image, const char *file_path, const int w, const int h )/*{{{*/ { gtk_image_clear( GTK_IMAGE(image) ); // 清除图像 GdkPixbuf *src_pixbuf = gdk_pixbuf_new_from_file(file_path, NULL); // 创建图片资源 GdkPixbuf *dest_pixbuf = gdk_pixbuf_scale_simple(src_pixbuf, w, h, GDK_INTERP_BILINEAR); // 指定大小 gtk_image_set_from_pixbuf(GTK_IMAGE(image), dest_pixbuf); // 图片控件重新设置一张图片(pixbuf) g_object_unref(src_pixbuf); // 释放资源 g_object_unref(dest_pixbuf); // 释放资源 }/*}}}*/ /*********************************************** * 函数功能:设置窗口显示字体颜色 * 参数类型:widget:需要改变颜色的控件 color_buf:设置字体颜色,如"red"、"blue" is_button:是否为button * 返回类型:成功返回0,失败返回-1 * 维护记录:2013-12-18 by lihuibo ***********************************************/ int sungtk_widget_set_font_color(GtkWidget *widget, const char *color_buf, gboolean is_button)/*{{{*/ { if(widget == NULL && color_buf==NULL) return -1; GdkColor color; GtkWidget *labelChild = NULL; sungtk_color_get(color_buf, &color); if(is_button == TRUE){ labelChild = gtk_bin_get_child(GTK_BIN(widget));//取出GtkButton里的label gtk_widget_modify_fg(labelChild, GTK_STATE_NORMAL, &color); gtk_widget_modify_fg(labelChild, GTK_STATE_SELECTED, &color); gtk_widget_modify_fg(labelChild, GTK_STATE_PRELIGHT, &color); }else{ gtk_widget_modify_fg(widget, GTK_STATE_NORMAL, &color); } return 0; }/*}}}*/