我和几个同学编的聊天工具界面(linux下用GTK编的,有几个bug,不能通信)

#include <gtk/gtk.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAXDATASIZE 100
#define DEF_PAD 10
#define DEF_PAD_SMALL 5
#define TM_YEAR_BASE 1900
GtkWidget *text_view1,*text_view2;
gchar *text;
//创建两个文本框1,2
GtkTextBuffer *buffer1,*buffer2;
//为文本框设置缓冲区1,2
GtkWidget *label0;
//创建改变字体的对话框
                      
typedef struct _CalendarData {
   GtkWidget *flag_checkboxes[5];
   gboolean settings[5];
   GtkWidget *font_dialog;
   GtkWidget *window;
   GtkWidget *prev2_sig;
   GtkWidget *prev_sig;
   GtkWidget *last_sig;
   GtkWidget *month;
} CalendarData;
enum {
   calendar_show_header,
   calendar_show_days,
   calendar_month_change,
   calendar_show_week,
   calendar_monday_first
};
/*
  * GtkCalendar
  */
static void calendar_date_to_string( CalendarData *data,
                                            char          *buffer,
                                            gint          buff_len )
{
   GDate date;
   guint year, month, day;
   gtk_calendar_get_date (GTK_CALENDAR (data->window),
                &year, &month, &day);
   g_date_set_dmy (&date, day, month + 1, year);
   g_date_strftime (buffer, buff_len - 1, "%x", &date);
}
static void calendar_set_signal_strings( char           *sig_str,
                                                 CalendarData *data )
{
   const gchar *prev_sig;
   prev_sig = gtk_label_get_text (GTK_LABEL (data->prev_sig));
   gtk_label_set_text (GTK_LABEL (data->prev2_sig), prev_sig);
   prev_sig = gtk_label_get_text (GTK_LABEL (data->last_sig));
   gtk_label_set_text (GTK_LABEL (data->prev_sig), prev_sig);
   gtk_label_set_text (GTK_LABEL (data->last_sig), sig_str);
}
static void calendar_month_changed( GtkWidget         *widget,
                                         CalendarData *data )
{
  char buffer[256] = "month_changed: ";
  calendar_date_to_string (data, buffer + 15, 256 - 15);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_day_selected( GtkWidget      *widget,
                                        CalendarData *data )
{
  char buffer[256] = "day_selected: ";
  calendar_date_to_string (data, buffer + 14, 256 - 14);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_day_selected_double_click ( GtkWidget       *widget,
                                                         CalendarData *data )
{
  char buffer[256] = "day_selected_double_click: ";
  guint day;
  calendar_date_to_string (data, buffer + 27, 256 - 27);
  calendar_set_signal_strings (buffer, data);
  gtk_calendar_get_date (GTK_CALENDAR (data->window),
                NULL, NULL, &day);
  if (GTK_CALENDAR (data->window)->marked_date[day-1] == 0) {
      gtk_calendar_mark_day (GTK_CALENDAR (data->window), day);
  } else {
      gtk_calendar_unmark_day (GTK_CALENDAR (data->window), day);
  }
}
static void calendar_prev_month( GtkWidget       *widget,
                                      CalendarData *data )
{
  char buffer[256] = "prev_month: ";
  calendar_date_to_string (data, buffer + 12, 256 - 12);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_next_month( GtkWidget       *widget,
                                      CalendarData *data )
{
  char buffer[256] = "next_month: ";
  calendar_date_to_string (data, buffer + 12, 256 - 12);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_prev_year( GtkWidget      *widget,
                                     CalendarData *data )
{
  char buffer[256] = "prev_year: ";
  calendar_date_to_string (data, buffer + 11, 256 - 11);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_next_year( GtkWidget      *widget,
                                     CalendarData *data )
{
  char buffer[256] = "next_year: ";
  calendar_date_to_string (data, buffer + 11, 256 - 11);
  calendar_set_signal_strings (buffer, data);
}
static void calendar_set_flags( CalendarData *calendar )
{
  gint i;
  gint options = 0;
  for (i = 0;i < 5; i++)
      if (calendar->settings[i])
          {
      options = options + (1 << i);
          }
  if (calendar->window)
      gtk_calendar_display_options (GTK_CALENDAR (calendar->window), options);
}
static void calendar_toggle_flag( GtkWidget       *toggle,
                                        CalendarData *calendar)
{
  gint i;
  gint j;
  j = 0;
  for (i = 0; i < 5; i++)
      if (calendar->flag_checkboxes[i] == toggle)
          j = i;
  calendar->settings[j] = !calendar->settings[j];
  calendar_set_flags (calendar);
}
static void calendar_font_selection_ok( GtkWidget        *button,
                                               CalendarData *calendar )
{
  GtkRcStyle *style;
  char *font_name;
  if (calendar->window)
      {
        font_name = gtk_font_selection_dialog_get_font_name (GTK_FONT_SELECTION_DIALOG
(calendar->font_dialog));
        if (font_name)
      {
        style = gtk_rc_style_new ();
        pango_font_description_free (style->font_desc);
        style->font_desc = pango_font_description_from_string (font_name);
        gtk_widget_modify_style (calendar->window, style);
        g_free (font_name);
      }
      }
  gtk_widget_destroy (calendar->font_dialog);
}
static void calendar_select_font( GtkWidget      *button,
                                        CalendarData *calendar )
{
  GtkWidget *window;
  if (!calendar->font_dialog) {
      window = gtk_font_selection_dialog_new ("Font Selection Dialog");
      g_return_if_fail (GTK_IS_FONT_SELECTION_DIALOG (window));
      calendar->font_dialog = window;
      gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
      g_signal_connect (window, "destroy",
                  G_CALLBACK (gtk_widget_destroyed),
                  &calendar->font_dialog);
      g_signal_connect (GTK_FONT_SELECTION_DIALOG (window)->ok_button,
                  "clicked", G_CALLBACK (calendar_font_selection_ok),
                  calendar);
      g_signal_connect_swapped (GTK_FONT_SELECTION_DIALOG (window)->cancel_button,
                      "clicked", G_CALLBACK (gtk_widget_destroy),
                     calendar->font_dialog);
  }
  window = calendar->font_dialog;
  if (!GTK_WIDGET_VISIBLE (window))
      gtk_widget_show (window);
  else
      gtk_widget_destroy (window);
}
static void create_calendar( void )
{
  GtkWidget *window;
  GtkWidget *vbox, *vbox2, *vbox3;
  GtkWidget *hbox;
  GtkWidget *hbbox;
  GtkWidget *calendar;
  GtkWidget *toggle;
  GtkWidget *button;
  GtkWidget *frame;
  GtkWidget *separator;
  GtkWidget *label;
  GtkWidget *bbox;
  static CalendarData calendar_data;
  gint i;
  struct {
      char *label;
  } flags[] =
      {
         { "Show Heading" },
         { "Show Day Names" },
         { "No Month Change" },
         { "Show Week Numbers" },
         { "Week Start Monday" }
      };
calendar_data.window = NULL;
calendar_data.font_dialog = NULL;
for (i = 0; i < 5; i++) {
   calendar_data.settings[i] = 0;
}
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "GtkCalendar Example");
gtk_container_set_border_width (GTK_CONTAINER (window), 5);

g_signal_connect (window, "delete-event",
              G_CALLBACK (gtk_false),
              NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
vbox = gtk_vbox_new (FALSE, DEF_PAD);
gtk_container_add (GTK_CONTAINER (window), vbox);
/*
  * The top part of the window, Calendar, flags and fontsel.
  */
hbox = gtk_hbox_new (FALSE, DEF_PAD);
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, DEF_PAD);
hbbox = gtk_hbutton_box_new ();
gtk_box_pack_start (GTK_BOX (hbox), hbbox, FALSE, FALSE, DEF_PAD);
gtk_button_box_set_layout (GTK_BUTTON_BOX (hbbox), GTK_BUTTONBOX_SPREAD);
gtk_box_set_spacing (GTK_BOX (hbbox), 5);
/* Calendar widget */
frame = gtk_frame_new ("Calendar");
gtk_box_pack_start(GTK_BOX (hbbox), frame, FALSE, TRUE, DEF_PAD);
calendar=gtk_calendar_new ();
calendar_data.window = calendar;
calendar_set_flags (&calendar_data);
gtk_calendar_mark_day (GTK_CALENDAR (calendar), 19);
gtk_container_add (GTK_CONTAINER (frame), calendar);
g_signal_connect (calendar, "month_changed",
             G_CALLBACK (calendar_month_changed),
             &calendar_data);
g_signal_connect (calendar, "day_selected",
             G_CALLBACK (calendar_day_selected),
             &calendar_data);
g_signal_connect (calendar, "day_selected_double_click",
             G_CALLBACK (calendar_day_selected_double_click),
             &calendar_data);
g_signal_connect (calendar, "prev_month",
             G_CALLBACK (calendar_prev_month),
             &calendar_data);
g_signal_connect (calendar, "next_month",
             G_CALLBACK (calendar_next_month),
             &calendar_data);
g_signal_connect (calendar, "prev_year",
             G_CALLBACK (calendar_prev_year),
             &calendar_data);
g_signal_connect (calendar, "next_year",
             G_CALLBACK (calendar_next_year),
             &calendar_data);
separator = gtk_vseparator_new ();
gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, TRUE, 0);
vbox2 = gtk_vbox_new (FALSE, DEF_PAD);
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, DEF_PAD);
/* Build the Right frame with the flags in */
frame = gtk_frame_new ("Flags");
gtk_box_pack_start (GTK_BOX (vbox2), frame, TRUE, TRUE, DEF_PAD);
vbox3 = gtk_vbox_new (TRUE, DEF_PAD_SMALL);
gtk_container_add (GTK_CONTAINER (frame), vbox3);
for (i = 0; i < 5; i++)
   {
      toggle = gtk_check_button_new_with_label (flags[i].label);
      g_signal_connect (toggle,
              "toggled",
              G_CALLBACK (calendar_toggle_flag),
              &calendar_data);
      gtk_box_pack_start (GTK_BOX (vbox3), toggle, TRUE, TRUE, 0);
      calendar_data.flag_checkboxes[i] = toggle;
   }
/* Build the right font-button */
button = gtk_button_new_with_label ("Font...");
g_signal_connect (button,
              "clicked",
              G_CALLBACK (calendar_select_font),
              &calendar_data);
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
/*
  * Build the Signal-event part.
  */
frame = gtk_frame_new ("Signal events");
gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, DEF_PAD);
vbox2 = gtk_vbox_new (TRUE, DEF_PAD_SMALL);
gtk_container_add (GTK_CONTAINER (frame), vbox2);
hbox = gtk_hbox_new (FALSE, 3);
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
label = gtk_label_new ("Signal:");
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
calendar_data.last_sig = gtk_label_new ("");
gtk_box_pack_start (GTK_BOX (hbox), calendar_data.last_sig, FALSE, TRUE, 0);
   hbox = gtk_hbox_new (FALSE, 3);
   gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
   label = gtk_label_new ("Previous signal:");
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
   calendar_data.prev_sig = gtk_label_new ("");
   gtk_box_pack_start (GTK_BOX (hbox), calendar_data.prev_sig, FALSE, TRUE, 0);
   hbox = gtk_hbox_new (FALSE, 3);
   gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
   label = gtk_label_new ("Second previous signal:");
   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
   calendar_data.prev2_sig = gtk_label_new ("");
   gtk_box_pack_start (GTK_BOX (hbox), calendar_data.prev2_sig, FALSE, TRUE, 0);
   bbox = gtk_hbutton_box_new ();
   gtk_box_pack_start (GTK_BOX (vbox), bbox, FALSE, FALSE, 0);
   gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
   button = gtk_button_new_with_label ("Close");
   g_signal_connect (button, "clicked",
               G_CALLBACK (gtk_main_quit),
               NULL);
   gtk_container_add (GTK_CONTAINER (bbox), button);
   GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
   gtk_widget_grab_default (button);
   gtk_widget_show_all (window);
}


void close_dialog_handler(GtkWidget *widget,gpointer data)
{
   gtk_widget_destroy(GTK_WIDGET(data));
}
//字体选择对话框的”确定”和”应用”按钮的clicked的处理函数
//函数设置了对话框中标签构件的字体
void cd_set_font(GtkWidget *widget,gpointer data)
{
   GdkColor color;
  
//获得选择的字体信息
  gchar *font_name=gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(data));
//设置字体
 PangoFontDescription *font_desc=pango_font_description_from_string(font_name);
 gtk_widget_modify_font(label0,font_desc);
 pango_font_description_free(font_desc);
 //关闭字体选择对话框
 gtk_widget_destroy(GTK_WIDGET(data));
}

//显示字体选择对话框,并设置按钮单击的回调函数
void cb_show_font_dialog(GtkWidget *widget,gpointer data)
{
 GtkWidget *font;

 font=gtk_font_selection_dialog_new("chooseyour prefer font type...");
 gtk_widget_show(GTK_FONT_SELECTION_DIALOG(font)->apply_button);
 g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font)->ok_button),
   "clicked",GTK_SIGNAL_FUNC(cd_set_font),(gpointer)font);
 g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font)->apply_button),
  "clicked",G_CALLBACK(cd_set_font),(gpointer)font);
 g_signal_connect_swapped(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font)->cancel_button),"clicked",G_CALLBACK(gtk_widget_destroy),(gpointer)font);
 g_signal_connect(GTK_OBJECT(font),"destroy",
       G_CALLBACK(close_dialog_handler),(gpointer)font);
 gtk_widget_show(font);
}

static gboolean release_resource(GtkWidget *widget,GdkEvent *event,gpointer data)
{
gtk_main_quit();
return FALSE;
}
void cb_active_open(GtkWidget *widget,gpointer data)
{
g_print("choose open/n");
}
void cb_active_save(GtkWidget *widget,gpointer data)
{
g_print("choose save/n");
}
void cb_active_close(GtkWidget *widget,gpointer data)
{
g_print("choose close/n");
}
void cb_active_jianqie(GtkWidget *widget,gpointer data)
{
g_print("choose jianqie/n");
}
void cb_active_fuzhi(GtkWidget *widget,gpointer data)
{
g_print("choose fuzhi/n");
}
void cb_active_zhantie(GtkWidget *widget,gpointer data)
{
g_print("choose zhantie/n");
}
void cb_active_pifu(GtkWidget *widget,gpointer data)
{
g_print("choose pifu/n");
}
void cb_active_zidingyi(GtkWidget *widget,gpointer data)
{
g_print("choose zidingyi/n");
}
void cb_active_former(GtkWidget *widget,gpointer data)
{
g_print("choose check/n");
}
void cb_active_clear(GtkWidget *widget,gpointer data)
{
g_print("choose clear/n");
}
void cb_active_copyright(GtkWidget *widget,gpointer data)
{
g_print("choose copyrigth/n");
}
void cb_active_fuction(GtkWidget *widget,gpointer data)
{
g_print("choose fuction/n");
}



//菜单里作者的函数

void cb_active_author(int argc,char *argv[ ])
{
GtkWidget *label;
GtkWidget *dialog;
gtk_init(&argc,&argv);
dialog=gtk_dialog_new();
gtk_window_set_title(GTK_WINDOW(dialog),"制作组");
gtk_widget_set_size_request(dialog,500,100);

label=gtk_label_new("开发成员:高智城 黄泓 余鑫淼 胡金梦 韩聪 王天纯 陶颉 党迎光");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),label,FALSE,FALSE,0);
 
gtk_widget_show_all(dialog);
}

//文本的函数
void button_event(GtkWidget *widget,gpointer *data)

{
gchar record[1000];
gchar *name,*next,*p;
//声明文本存储的地址
GtkTextIter start,end;
//设置文本框1缓冲区开始与终止的iter
GtkTextIter begin,terminate;
//设置文本框2缓冲区开始与终止的iter

 FILE *fp;
//创建保存聊天记录的文件地址
fp=fopen("record.txt","w+");
//打开聊天记录文件准备写入

gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer1),&start,&end);/*获得文本框1缓冲区开始和结束位置的Iter*/

 

const GtkTextIter s=start,e=end;

text=gtk_text_buffer_get_text(GTK_TEXT_BUFFER(buffer1),&s,&e,FALSE);/*获得文本框1缓冲区文本*/
gtk_text_buffer_delete(GTK_TEXT_BUFFER(buffer1),&start,&end);//删除文本框1的文本

gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer2),&begin,&terminate);/*获得缓冲区2开始和结束位置的Iter*/
gtk_text_buffer_insert(GTK_TEXT_BUFFER(buffer2),&begin,text,strlen(text));/*插入文本text到缓冲区2*/
name="host:/n";
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer2),&begin,&terminate);/*获得缓冲区2开始和结束位置的Iter*/
gtk_text_buffer_insert(GTK_TEXT_BUFFER(buffer2),&begin,name,strlen(name));/*插入文本"host:"到缓冲区2*/
next="/n";
gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer2),&begin,&terminate);/*获得缓冲区2开始和结束位置的Iter*/
gtk_text_buffer_insert(GTK_TEXT_BUFFER(buffer2),&begin,next,strlen(next));//插入换行符到缓冲区2*gtk_widget_set_request(text_view,200,120);

/*int i=0;   
p=text;  
while(*p!=NULL)
{   record[i]=*p;
                     i++;   }  */  
fwrite(text,1000,1,fp);
             fclose(fp);
g_print("%s/n",text);//终端显示输入的文本。

}


//服务器端
void senddata()
{
    int client_fd;
    int sockfd,sin_size;
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    my_addr.sin_family=AF_INET;
    my_addr.sin_port=htons(SERVPORT);
    my_addr.sin_addr.s_addr=INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);
    bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr));
    listen(sockfd,BACKLOG);
    sin_size=sizeof(struct sockaddr_in);
    client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size);
    send(client_fd,"lksahdflhaskl", 26, 0);    //""之间是发送字符 请更改函数类型 得到参数并发送 或者可在该函数内添加输入函数
}






void callback( GtkWidget *widget,
             gpointer   data )
{
   g_print ("Hello again ­ %s was pressed/n", (char *) data);
}

gint delete_event( GtkWidget *widget,
                GdkEvent  *event,
                gpointer   data )
{
   gtk_main_quit ();
   return FALSE;
}

void ziti(widget *text_view2) {
GtkWidget *dialog;
GtkWidget *btn;
GtkWidget *label0;
//创建改变字体的对话框
dialog=gtk_dialog_new();
//设置对话框标题
 gtk_window_set_title(GTK_WINDOW(dialog),"修改字体");
//设置对话框尺寸
 gtk_widget_set_size_request(dialog,200,50);
label0=text_view2;//*所修改的内容
//设置新的按钮
 btn=gtk_button_new_with_label("Font...");
//将按钮装入对话框中
 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area),btn,FALSE,FALSE,0);
//连接回调函数
 g_signal_connect(G_OBJECT(btn),"clicked",GTK_SIGNAL_FUNC(cb_show_font_dialog),NULL);
 
gtk_widget_show_all(dialog);

}

static void file_ok_sel( GtkWidget           *w,
                              GtkFileSelection *fs )
{
     g_print ("%s/n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
}
void file_select()
{
 GtkWidget *filew;
filew = gtk_file_selection_new ("File selection");
  
     /* Connect the ok_button to file_ok_sel function */
     g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
                   "clicked", G_CALLBACK (file_ok_sel), (gpointer) filew);
     /* Connect the cancel_button to destroy the widget */
   
                      
     /* Lets set the filename, as if this were a save dialog, and we are giving
       a default filename */
     gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew),
                           "penguin.png");
     gtk_widget_show (filew);
}

int main( int   argc,
        char *argv[] )
{
   GtkWidget *window;
   GtkWidget *button1;
   GtkWidget *button2;
   GtkWidget *button3;
   GtkWidget *button4;
    GtkWidget *button5;
   GtkWidget *button6;
   GtkWidget *label1,*label2,*label3,*label4;
   GtkWidget *menu;
    GtkWidget *menu_bar;  
   GtkWidget *menu_item;
   GtkWidget *top_item;
   GtkWidget *vbox;
  GtkWidget *image1,*image2;
       GtkWidget *table;
//
     
  
   gtk_init (&argc, &argv);
  
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  
   gtk_window_set_title (GTK_WINDOW (window), "聊天软件LINPOP-III");
  
   g_signal_connect (G_OBJECT (window), "delete_event",
                   G_CALLBACK (delete_event), NULL);
  
   gtk_container_set_border_width (GTK_CONTAINER (window), 20);


   table = gtk_table_new (20, 30, TRUE);
 
   gtk_container_add (GTK_CONTAINER (window), table);
 
  label1 = gtk_label_new("RECEIVE                    MESSAGE:");
  label2 = gtk_label_new("PLEASE                     ENTER: ");
  label3 = gtk_label_new("她的形象 ");
  label4 = gtk_label_new("我的形象 ");


  gtk_table_attach_defaults (GTK_TABLE (table), label1, 4, 16, 1, 2);
  gtk_table_attach_defaults (GTK_TABLE (table), label2, 4, 16, 10, 11);
  gtk_table_attach_defaults (GTK_TABLE (table), label3, 20, 24, 1, 2);
  gtk_table_attach_defaults (GTK_TABLE (table), label4, 20, 24, 10, 11);

  
    image1=gtk_image_new_from_file("bbb.gif");
   image2=gtk_image_new_from_file("aaa.gif");
   gtk_table_attach_defaults (GTK_TABLE (table), image1, 20, 30, 2, 10);
   gtk_table_attach_defaults (GTK_TABLE (table), image2, 20, 30, 11, 19);

 
       text_view1=gtk_text_view_new();/*创建文本框构件1*/
      text_view2=gtk_text_view_new();
                 //创建文本框2
               gtk_widget_set_size_request(text_view1,200,120);
             //设置文本框1的大小
    gtk_widget_set_size_request(text_view2,200,120);
    //设置文本框2的大小
    buffer1=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view1));/*获得文本框缓冲区1*/
    buffer2=gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view2));//获得文本框缓冲区2
     gtk_table_attach_defaults (GTK_TABLE (table), text_view1, 0, 20, 11, 19);
     gtk_table_attach_defaults (GTK_TABLE (table), text_view2, 0, 20, 2, 10);
   
   button1 = gtk_button_new_with_label ("Link:");
   button2 = gtk_button_new_with_label ("退出");
   button3 = gtk_button_new_with_label ("发送");
   button4 = gtk_button_new_with_label ("服务器");
   button5 = gtk_button_new_with_label ("字体");
   button6 = gtk_button_new_with_label ("日历");

   g_signal_connect (G_OBJECT (button1), "clicked",
                   G_CALLBACK (callback), (gpointer) "Link:");
 g_signal_connect (G_OBJECT (button2), "clicked",
                   GTK_SIGNAL_FUNC(release_resource) ,NULL);
  gtk_signal_connect(GTK_OBJECT(button3),"clicked",GTK_SIGNAL_FUNC(button_event),NULL);
//为按钮3连接回调函数

 g_signal_connect (G_OBJECT (button4), "clicked",
                   GTK_SIGNAL_FUNC(senddata),NULL);
g_signal_connect (GTK_OBJECT(button5),"clicked",GTK_SIGNAL_FUNC(ziti(text_view2)),NULL);
g_signal_connect (G_OBJECT (button6), "clicked",GTK_SIGNAL_FUNC(create_calendar), NULL);

   gtk_table_attach_defaults (GTK_TABLE (table), button1, 0, 2, 19, 20);
   gtk_table_attach_defaults (GTK_TABLE (table), button2, 28, 30, 19, 20);
  gtk_table_attach_defaults (GTK_TABLE (table), button3, 23, 25, 19, 20);
 gtk_table_attach_defaults (GTK_TABLE (table), button4, 18, 20, 19, 20);
 gtk_table_attach_defaults (GTK_TABLE (table), button5, 0, 2, 10, 11);
 gtk_table_attach_defaults (GTK_TABLE (table), button6, 18, 20, 10, 11);



menu_bar=gtk_menu_bar_new();
gtk_table_attach_defaults (GTK_TABLE (table), menu_bar, 0, 4, 0, 1);

gtk_widget_show(menu_bar);


menu=gtk_menu_new();
menu_item=gtk_menu_item_new_with_label("打开");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(file_select),NULL);
gtk_widget_show(menu_item);


top_item=gtk_menu_item_new_with_label("传输文件");
gtk_widget_show(top_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(top_item),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar),top_item);






menu_bar=gtk_menu_bar_new();
gtk_table_attach_defaults (GTK_TABLE (table), menu_bar, 4, 8, 0, 1);
gtk_widget_show(menu_bar);
menu=gtk_menu_new();
menu_item=gtk_menu_item_new_with_label("剪切");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_jianqie),NULL);
gtk_widget_show(menu_item);

menu_item=gtk_menu_item_new_with_label("复制");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_fuzhi),NULL);
gtk_widget_show(menu_item);

menu_item=gtk_menu_item_new_with_label("粘贴");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_zhantie),NULL);
gtk_widget_show(menu_item);

top_item=gtk_menu_item_new_with_label("编辑");
gtk_widget_show(top_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(top_item),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar),top_item);



menu_bar=gtk_menu_bar_new();
gtk_table_attach_defaults (GTK_TABLE (table), menu_bar, 8, 12, 0, 1);
gtk_widget_show(menu_bar);
menu=gtk_menu_new();
menu_item=gtk_menu_item_new_with_label("皮肤");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_pifu),NULL);
gtk_widget_show(menu_item);

menu_item=gtk_menu_item_new_with_label("自定义");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_zidingyi),NULL);
gtk_widget_show(menu_item);

top_item=gtk_menu_item_new_with_label("设置");
gtk_widget_show(top_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(top_item),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar),top_item);








menu_bar=gtk_menu_bar_new();
gtk_table_attach_defaults (GTK_TABLE (table), menu_bar, 12, 16, 0, 1);
gtk_widget_show(menu_bar);
menu=gtk_menu_new();
menu_item=gtk_menu_item_new_with_label("查看前期记录");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_former),NULL);
gtk_widget_show(menu_item);

menu_item=gtk_menu_item_new_with_label("清除今日记录");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_clear),NULL);
gtk_widget_show(menu_item);

top_item=gtk_menu_item_new_with_label("聊天记录");
gtk_widget_show(top_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(top_item),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar),top_item);


menu_bar=gtk_menu_bar_new();
gtk_table_attach_defaults (GTK_TABLE (table), menu_bar, 16, 20, 0, 1);
gtk_widget_show(menu_bar);
menu=gtk_menu_new();
menu_item=gtk_menu_item_new_with_label("版本");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_copyright),NULL);
gtk_widget_show(menu_item);
menu_item=gtk_menu_item_new_with_label("功能");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_fuction),NULL);
gtk_widget_show(menu_item);
menu_item=gtk_menu_item_new_with_label("作者");
gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
g_signal_connect(G_OBJECT(menu_item),"activate",GTK_SIGNAL_FUNC(cb_active_author),NULL);
gtk_widget_show(menu_item);

top_item=gtk_menu_item_new_with_label("帮助");
gtk_widget_show(top_item);
gtk_menu_item_set_submenu(GTK_MENU_ITEM(top_item),menu);
gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar),top_item);



g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(release_resource),NULL);

gtk_widget_show_all(window);
  gtk_main();
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值