gtk示例.docx
- 文档编号:9913233
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:14
- 大小:17.55KB
gtk示例.docx
《gtk示例.docx》由会员分享,可在线阅读,更多相关《gtk示例.docx(14页珍藏版)》请在冰豆网上搜索。
gtk示例
gtk示例
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineSERVER_PORT3333
#defineMAX_MSG_SIZE1024
charmsg[MAX_MSG_SIZE];
voidPackNewlabel(GtkWidget*box,char*sLabel);voidPackNewcombo(GtkWidget*box);
GtkWidget*PackNewentry_chat(GtkWidget*box);voidPackNewbatton0(GtkWidget*box,char*button_name);voidPackNewbatton1(GtkWidget*box,char*button_name);GtkWidget*create_view_and_model();
GtkTreeModel*create_and_fill_model();voidon_changed(GtkWidget*widget,gpointerstatusbar);
voidevent_close();
//voidselect_file_activated(GtkWidget*widget);voidview_onRowActivated(GtkTreeView*treeview,GtkTreePath*path,GtkTreeViewColumn
*col,gpointeruserdata);
constchar*button_event_chat(GtkWidget*widget,gpointer*data);
GtkWidget*name_chat;
GtkWidget*button1;
GtkTreeStore*treestore;
GtkTreeItertoplevel,child;
voidudp_server(void);
voidudps_respon(intsockfd);
externconstchar*getip();
externvoidUIGetUsrInfo(void*arg);
externintUIGetUsrInfo_auto(void*arg);externintMysql_newtable(char*a);
externintMysql_find_p();
externintMysql_insert_p(char*friendip);externvoidshowmsg(char*msg,char*c);externintudp_client(char*text,constchar*IP);
externvoidmysql_savemsg(char*say1,char*ip1,char*name1,char*a);
GData*widget_chat_dlg;
externstructWidgets_Chat{
GtkWidget*chat_dlg;
GtkWidget*textview_output,*textview_input;
}arg2;
voidredraw();
enum
{
LIST_ICON=0,//explainpicture
LIST_NAME,//explainname
COLUMN,//explaintext
NUM_COLS
};
structargument
{
charvalueip[17];
}arg1;
inttree_view()
{
gdk_threads_enter();
intres;
pthread_tb_thread;
res=pthread_create(&b_thread,NULL,udp_server,NULL);
if(res<0)
{
printf("pthreadcreatefailed");
exit
(1);
}
GtkWidget*window;
GtkWidget*box;
GtkWidget*view;
GtkTreeSelection*selection;
GtkWidget*statusbar;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
/*登记destroy信号,调用退出函数*/
box=gtk_vbox_new(FALSE,2);
PackNewlabel(box,"NO.6_chat_program");
PackNewcombo(box);
PackNewlabel(box,"PleaseInputIP");
PackNewentry_chat(box);
PackNewbatton1(box,"add");
gtk_signal_connect(GTK_OBJECT(button1),"pressed",G_CALLBACK(button_event_chat),NUL
L);
gtk_container_add(GTK_CONTAINER(window),box);/*把组装盒放入窗体*/
gtk_widget_set_size_request(window,250,400);
view=create_view_and_model();
selection=gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
gtk_box_pack_start(GTK_BOX(box),view,TRUE,TRUE,1);
PackNewbatton0(box,"set");
statusbar=gtk_statusbar_new();
gtk_box_pack_start(GTK_BOX(box),statusbar,FALSE,TRUE,1);
g_signal_connect(selection,"changed",G_CALLBACK(on_changed),statusbar);
g_signal_connect(view,"row-activated",G_CALLBACK(view_onRowActivated),NULL);
gtk_widget_show(box);/*使组装盒可视*/
gtk_widget_show_all(window);/*使窗体可见*/
gtk_main();
gdk_threads_leave();
pthread_exit();
return1;
}
voidPackNewlabel(GtkWidget*box,char*sLabel)
{
GtkWidget*label;
label=gtk_label_new(sLabel);/*建立标号*/
gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,0);/*把标签控件加入组装盒*/
gtk_widget_show(label);
}
voidPackNewcombo(GtkWidget*box)
{
GtkWidget*combo;
combo=gtk_combo_new();
GList*glist=NULL;
glist=g_list_append(glist,"pleasechooseyourstation");/*添加字符串到链表*/
glist=g_list_append(glist,"online");
glist=g_list_append(glist,"busy");
glist=g_list_append(glist,"free");
gtk_combo_set_popdown_strings(GTK_COMBO(combo),glist);
gtk_box_pack_start(GTK_BOX(box),combo,FALSE,FALSE,0);/*把combo控件加入组装盒
*/
gtk_widget_show(combo);
}
GtkWidget*create_view_and_model()
{
GtkTreeViewColumn*col;
GtkCellRenderer*renderer_text;//explaintext
GtkCellRenderer*renderer_icon;//explainpicture
GtkCellRenderer*renderer_name;//explainname
GtkWidget*view;
GtkTreeModel*model;//这边要不要改成全局变量,
view=gtk_tree_view_new();
col=gtk_tree_view_column_new();
gtk_tree_view_column_set_title(col,"YOURGROUP");
gtk_tree_view_append_column(GTK_TREE_VIEW(view),col);
renderer_text=gtk_cell_renderer_text_new();//explaintext
renderer_icon=gtk_cell_renderer_pixbuf_new();//explainpicture
renderer_name=gtk_cell_renderer_text_new();//explainname
gtk_tree_view_column_pack_start(col,renderer_icon,FALSE);//addpicturecol
gtk_tree_view_column_pack_start(col,renderer_name,TRUE);//addnamecol
gtk_tree_view_column_pack_start(col,renderer_text,TRUE);//addtextcol
gtk_tree_view_column_add_attribute(col,renderer_icon,"pixbuf",LIST_ICON);//add
picturetocol
gtk_tree_view_column_add_attribute(col,renderer_name,"text",LIST_NAME);//addname
tocol
gtk_tree_view_column_add_attribute(col,renderer_text,"text",COLUMN);//addtextto
col
model=create_and_fill_model();
gtk_tree_view_set_model(GTK_TREE_VIEW(view),model);
g_object_unref(model);
returnview;
}
GtkTreeModel*create_and_fill_model()
{
GdkPixbuf*pixbuf;
constgchar*files[]={"./newface/1.bmp"};
pixbuf=gdk_pixbuf_new_from_file(files[0],NULL);
treestore=
gtk_tree_store_new(NUM_COLS,GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING)
;
gtk_tree_store_append(treestore,&toplevel,NULL);
gtk_tree_store_set(treestore,&toplevel,COLUMN,"Myself",-1);
gtk_tree_store_append(treestore,&child,&toplevel);
gtk_tree_store_set(treestore,&child,LIST_ICON,pixbuf,LIST_NAME,"yourself",COLUMN,
getip(),-1);
gtk_tree_store_append(treestore,&toplevel,NULL);
gtk_tree_store_set(treestore,&toplevel,COLUMN,"YourfFriends",-1);
returnGTK_TREE_MODEL(treestore);
}
voidon_changed(GtkWidget*widget,gpointerstatusbar){
GtkTreeIteriter;
GtkTreeModel*model;
char*value;
if(gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget),&model,&iter))
{
gtk_tree_model_get(model,&iter,COLUMN,&value,-1);
gtk_statusbar_push(GTK_STATUSBAR(statusbar),
gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar),value),value);
g_free(value);
}
}
voidPackNewbatton0(GtkWidget*box,char*button_name){
GtkWidget*button;
button=gtk_button_new_with_label(button_name);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);/*把按钮加入组装盒*/
gtk_widget_show(button);
}
voidPackNewbatton1(GtkWidget*box,char*button_name){
button1=gtk_button_new_with_label(button_name);
gtk_box_pack_start(GTK_BOX(box),button1,FALSE,FALSE,0);/*把按钮加入组装盒
*/
gtk_widget_show(button1);
}
voidview_onRowActivated(GtkTreeView*treeview,GtkTreePath*path,GtkTreeViewColumn
*col,gpointeruserdata)
{
GtkTreeIteriter;
GtkTreeModel*model;
char*value;//ip
char*value_name;//name
pthread_tc_thread[100];
intj=0;
intres;
model=gtk_tree_view_get_model(treeview);
if(gtk_tree_model_get_iter(model,&iter,path))
{
gtk_tree_model_get(model,&iter,COLUMN,&value,LIST_NAME,
&value_name,-1);
if(Mysql_find_p(value)==0)
{
strcpy(arg1.valueip,value);
g_print("chat2%s\n",arg1.valueip);
res=pthread_create(&(c_thread[j]),NULL,UIGetUsrInfo_auto,(void
*)&arg1);
j++;
Mysql_newtable(value);
Mysql_insert_p(value);
if(res<0)
{
printf("pthreadcreatefailed");
exit
(1);
}
g_free(value);
g_free(value_name);
//pthread_join(c_thread[j],NULL);
}
}
}
GtkWidget*PackNewentry_chat(GtkWidget*box){
name_chat=gtk_entry_new();/*创建录入构件*/
gtk_box_pack_start(GTK_BOX(box),name_chat,FALSE,FALSE,5);/*把录入构件加入组合框*/
gtk_widget_show(name_chat);/*显示录入构件*/
returnname_chat;
}
constchar*button_event_chat(GtkWidget*widget,gpointer*data)
{
GdkPixbuf*pixbuf;
constgchar*files[]={"./newface/2.bmp"};
pixbuf=gdk_pixbuf_new_from_file(files[0],NULL);
constchar*uname;
uname=(char*)malloc(sizeof(gchar));
uname=gtk_entry_get_text(GTK_ENTRY(name_chat));/*获得录入构件正文*/
gtk_tree_store_append(treestore,&child,&toplevel);
gtk_tree_store_set(treestore,
&child,LIST_ICON,pixbuf,LIST_NAME,"Yourfriends",COLUMN,uname,-1);
}
voidudp_server(void)
{
intsockfd;
structsockaddr_inaddr;
/*服务器端开始建立socket描述符*/
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
fprintf(stderr,"SocketError:
%s\n",strerror(errno));
exit
(1);
}
/*服务器端填充sockaddr结构*/
bzero(&addr,sizeof(structsockaddr_in));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr.sin_port=htons(SERVER_PORT);
/*捆绑sockfd描述符*/
if(bind(sockfd,(structsockaddr*)&addr,sizeof(structsockaddr_in))<0)
{
fprintf(stderr,"BindError:
%s\n",strerror(errno));
exit
(1);
}
udps_respon(sockfd);//进行读写操作
close(sockfd);
}
voidudps_respon(intsockfd)
{
structsockaddr_inaddr;
intaddrlen,n;
pthread_td_thread[100];
intj=0;
intres;
while
(1)
{/*从网络上读,并写到网络上*/
bzero(msg,sizeof(msg));//初始化,清零
addrlen=sizeof(structsockaddr);
n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(structsockaddr*)&addr,&addrlen);//从客户端接收消息
/*显示服务端已经收到了信息*/
printf("Serverhavereceived%s\n",msg);
charmsg_type=msg[0];
switch(msg_type)
{
case'1':
redraw();
char*a=(char*)malloc(sizeof(char)*17);
strcpy(a,getip());
g_print("%s",a);
a[0]='2';
sleep
(2);
udp_client(a,(constchar*)msg);
free(a);
break;
case'2':
msg[0]='1';
redraw();
break;
default:
printf("receivecconnectionfrom%s\n",inet_ntoa(addr.sin_addr));
char*ip_auto=(char*)malloc(sizeof(char)*17);
strcpy(ip_auto,inet_ntoa(addr.sin_addr));
if(Mysql_find_p(inet_ntoa(addr.sin_addr))==0)
{
structargumentarg;
strcpy(arg.valueip,ip_auto);
g_print("%s",arg.valueip);
res=pthread_create(&(d_thread[j]),NULL,UIGetUsrInfo_auto,(vo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- gtk 示例