没有合适的资源?快使用搜索试试~ 我知道了~
一个五脏俱全的Gtk小程序(创建窗口,构件,绘图等)
4星 · 超过85%的资源 需积分: 35 58 下载量 132 浏览量
2008-10-26
15:14:18
上传
评论
收藏 111KB DOC 举报
温馨提示
试读
26页
是一个应用gtk工具包制作的小程序。 使用窗口创建,树图构件,绘图区构件,各种信号回调函数。
资源推荐
资源详情
资源评论
一个五脏俱全的 Gtk 小程序
#include<gtk/gtk.h>
#include<glib.h>
#include<stdio.h>
#include<malloc.h>
#include<math.h>
enum /*定义图形的类型*/
{
PIX_DRAW=1, /*类型-点*/
LINE_DRAW,
CIRCLE_DRAW,
RECT_DRAW,
POLY_DRAW
};
typedef struct /*定义含树视图和绘图区的结构体,以便回调函数传递参
数*/
{
GtkWidget *tree_view;
GtkWidget *draw_area;
}tree_drawing;
typedef struct /*定义含树视图、绘图区和文本输入框的结构体,以便回
调函数传递参数*/
{
GtkWidget *window;
GtkWidget *view;
GtkWidget *entry;
}wview;
typedef struct /*为方便参数传递而创建的结构体*/
{
GtkWidget *window;
GtkWidget *view;
GtkWidget *entry;
GtkWidget *draw_area;
}wdview;
typedef struct _2D_POINT /*定义二维数据点结构体*/
{
6oat x,y;
}_2d_point;
/*------------定义全局变量--------------*/
double width=100.0,height=100.0; /*定义系统长宽,这里与窗口窗宽
无关*/
int draw_type=0; /*定义图像类型*/
GSList *prt=NULL; /*定义存放数据的链表*/
GtkTreeModel *model; /*定义树视图模型*/
GtkTreeStore *tree_store; /*定义树形存储*/
GtkTreeIter top_pix,top_line,top_circle,top_rect,top_poly,other; /*定
义树视图的项,以便添加元素*/
/*-----------函数声明部分------------------*/
GtkTreeView* create_tree(void); /*创建树视图*/
GtkTreeModel* create_model(void); /*创建树视图模型*/
void get_new_@le(GtkWidget *button,wview *wv);/*获得文件名,并修
改树视图显示*/
void create_@le(GtkWidget *create_@le_button,GtkWidget *view);/*创
建文件菜单的回调函数*/
void get_import_@le(GtkWidget* button,wdview *wdv); /*获得导
入文件名,并修改树视图和绘图区显示*/
void messagebox(const char *str); /*消息提示框,用于提示相
关信息*/
void import_@le(GtkWidget *import_@le_button,tree_drawing *td);/*
导入文件菜单的回调函数*/
void export_@le(GtkWidget *export_@le_button,GtkWidget *view);/*导
出文件菜单的回调函数*/
void enlarge_obj(GtkWidget *enlarge,GtkWidget *data);/*工具栏中放
大按钮的回调函数,修改绘图区显示*/
void de6ate_obj(GtkWidget *de6ate,GtkWidget *data);/*工具栏中缩小
按钮的回调函数,修改绘图区显示*/
void draw_pix(void); /*draw 菜单下,points 菜单的回调函数
*/
void draw_line(void); /*Line 菜单的回调函数*/
void draw_circle(void); /*Circle 菜单的回调函数*/
void draw_rect(void); /*Rectagle 菜单的回调函数*/
void draw_poly(void); /*Plygon 菜单的回调函数*/
void draw_prt(GtkWidget *data); /*在绘图区中按照图像类型,
将链表内容绘制出来,修改绘图区显示*/
/*下面这几个函数都没实现,这里不做具体介绍*/
/*
void show_part(GtkWidget *view,GtkWidget *draw_area);
void hide_part(GtkWidget *view,GtkWidget *draw_are);
void del_part(GtkWidget *view,GtkWidget *draw_area);
void modify_part(GtkWidget *view,GtkWidget *draw_area);
GtkWidget* pop_menu(GtkWidget *draw_area);
static gboolean view_press(GtkWidget *widget,GdkEventButton
*event,GtkWidget *menu);
*/
/*-----------函数定义部分------------*/
/*
GtkWidget* pop_menu(GtkWidget *draw_area)
{
GtkWidget *@le_menu;
GtkWidget *show_item,*hide_item,*del_item,*modify_item;
show_item=gtk_menu_item_new_with_label("show");
hide_item=gtk_menu_item_new_with_label("hide");
del_item=gtk_menu_item_new_with_label("delete");
modify_item=gtk_menu_item_new_with_label("modify");
gtk_menu_append(GTK_MENU(@le_menu),show_item);
gtk_menu_append(GTK_MENU(@le_menu),hide_item);
gtk_menu_append(GTK_MENU(@le_menu),del_item);
gtk_menu_append(GTK_MENU(@le_menu),modify_item);
g_signal_connect_swapped(G_OBJECT(show_item),"activate",G_CALL
BACK(show_part),draw_area);
g_signal_connect_swapped(G_OBJECT(hide_item),"activate",G_CALL
BACK(hide_part),draw_area);
g_signal_connect_swapped(G_OBJECT(del_item),"activate",G_CALLB
ACK(del_part),draw_area);
g_signal_connect_swapped(G_OBJECT(modify_item),"activate",G_CA
LLBACK(modify_part),draw_area);
return @le_menu;
}
void show_part(GtkWidget *view,GtkWidget *draw_area)
{
}
void hide_part(GtkWidget *view,GtkWidget *draw_are)
{
}
void del_part(GtkWidget *view,GtkWidget *draw_area)
{
}
void modify_part(GtkWidget *view,GtkWidget *draw_area)
{
}
*/
/*上面几个函数都还没实现,由于事件问题,在这里就不具体实现了*/
/*-----------函数定义部分-------------*/
/*创建树视图,向里面添加列,并调用树视图模型创建函数完成树视图的创建,
* 输入参数:无
* 输出参数:树视图构件 tree_view
* 日期:2007-4-7 修改*/
GtkTreeView* create_tree(void)
{
GtkWidget *tree_view;
GtkTreeViewColumn *col;
GtkCellRenderer *cell;
tree_view=gtk_tree_view_new();
col=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(col,"part");
gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view),col);
cell=gtk_cell_renderer_text_new();
//g_object_set(cell,"editable",TRUE,NULL);
//g_signal_connect(cell,"edited",G_CALLBACK(cell_edited),NULL);
gtk_tree_view_column_pack_start(col,cell,TRUE);
gtk_tree_view_column_add_attribute(col,cell,"text",0);
model=create_model();
gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view),model);
return GTK_TREE_VIEW(tree_view);
}
/*创建树视图模型,向 tree_store 里面添加条目
* 输入参数:无
* 输出参数:树视图模型 tree_store
* 日期:2007-4-7 修改*/
GtkTreeModel* create_model()
{
tree_store=gtk_tree_store_new(1,G_TYPE_STRING);
//添加树的项
gtk_tree_store_append(tree_store,&top_pix,NULL);
gtk_tree_store_set(tree_store,&top_pix,
0,"Points",-1);
gtk_tree_store_append(tree_store,&top_line,NULL);
gtk_tree_store_set(tree_store,&top_line,
0,"Lines",-1);
gtk_tree_store_append(tree_store,&top_circle,NULL);
gtk_tree_store_set(tree_store,&top_circle,
0,"Circles",-1);
gtk_tree_store_append(tree_store,&top_rect,NULL);
gtk_tree_store_set(tree_store,&top_rect,
0,"Rectangles",-1);
gtk_tree_store_append(tree_store,&top_poly,NULL);
gtk_tree_store_set(tree_store,&top_poly,
0,"Polygons",-1);
gtk_tree_store_append(tree_store,&other,NULL);
gtk_tree_store_set(tree_store,&other,
0,"Others",-1);
return GTK_TREE_MODEL(tree_store);
}
/*获得文本输入框内容,并将其加入到树视图中显示,并隐藏新建文件窗口
* 输入参数:按钮构件本身 button,包含文本输入框、树视图和绘图区的结
构体 wv
* 输出参数:无
* 日期:2007-4-7 修改*/
void get_new_@le(GtkWidget *button,wview *wv)
{
char *str=malloc(20*sizeof(char));
str=(char*)gtk_entry_get_text(GTK_ENTRY(wv->entry));
GtkTreeIter child;
gtk_tree_store_append(tree_store,&child,&other);/*向树存储类型的
构件中添加条目*/
gtk_tree_store_set(tree_store,&child, /*设置新添加条目的文本显
示*/
0,str,-1);
/*FILE *fp=NULL;
if((fp=fopen(str,"w"))==NULL)
printf("error in open @le %s\n",str);
fclose(fp);*/
gtk_widget_hide(wv->window);
}
/*隐藏窗口,
* 输入参数:按钮 button,窗口构件 window
* 输出参数:无
* 日期:2007-4-7 修改*/
void cancel_create(GtkWidget *button,GtkWidget *window)
{
gtk_widget_hide(window);
}
/*创建文件菜单的回调函数。用于打开一个对话框,让用户输入文件名,然后
剩余25页未读,继续阅读
资源评论
- hgucao2013-04-30挺好的实例 注释详细
- CAIDANNI2013-12-03还行,蛮不错的。
jw_lqc
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功