zoukankan      html  css  js  c++  java
  • test.c

    #include <gtk/gtk.h>
    GtkWidget *create_window(); //创建窗体和控件!!
    gboolean button_press(GtkWidget *window,GdkEventButton *event,gint data);
    int main(int argc,char *argv[])
    {
        GtkWidget *window;
        gtk_init(&argc, &argv); //初始化
        window = create_window(); //创建窗体和控件!!
         
        gtk_widget_show_all(window); //显示窗体和控件
        gtk_main(); //事件循环处理
        return 0;
    }
     
    GtkWidget *create_button(const gchar *button_str)
    {
        GtkWidget *button = gtk_button_new_with_label(button_str);
        return button;
    }
     
    GtkWidget *create_image(const gchar *path)
    {
        GtkWidget *image = gtk_image_new_from_file(path);
        return image;
    }
     
    //退出按钮(button2)单击事件函数
    void button2_click()
    {
        gtk_main_quit();
    }
     
    void button1_click()
    {
        GtkWidget *dialog; //提示框
        gchar *msg = "科创职业学院计算机网络及应用
    三国软件开发小组 菜鸟
    邮箱:qiu_hai_long@sina.com
    qq:356752238
    ";
        GtkMessageType type = GTK_MESSAGE_INFO; //信息消息
        //GTK_DIALOG_MODAL 对话框模式   GTK_BUTTONS_OK 只有一个'OK'按钮
        dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_OK, msg);
        gtk_dialog_run(GTK_DIALOG(dialog));
        gtk_widget_destroy(dialog); //销毁dialog
    }
     
    //新建任意布局控件和布局上的控件内容
    GtkWidget *create_fixed()
    {
        GtkWidget *fixed   =  gtk_fixed_new(); //新建任意布局
        GtkWidget *button1 =  create_button("      确定      ");
        GtkWidget *button2 =  create_button("      退出      ");
        GtkWidget *text1   =  gtk_entry_new();
        GtkWidget *text2   =  gtk_entry_new();
        GtkWidget *image   = create_image("1.png");
         
        //设置text2为密码输入 gtk_entry_set_visibility
        gtk_entry_set_visibility(GTK_ENTRY(text2),FALSE);
        //设置控件的 宽和高
        gtk_widget_set_size_request(text1, 110, 25);
        gtk_widget_set_size_request(text2, 110, 25);   
         
        gtk_fixed_put(GTK_FIXED(fixed), image, 0, 0);       //添加窗体背景图片
        gtk_fixed_put(GTK_FIXED(fixed), button1, 90, 185);
        gtk_fixed_put(GTK_FIXED(fixed), button2, 195, 185);
        gtk_fixed_put(GTK_FIXED(fixed), text1, 167, 112); //添加 gtkentry的text1
        gtk_fixed_put(GTK_FIXED(fixed), text2, 167, 145); //添加 gtk.....的text2
        //退出按钮(button2)单击事件
        g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(button2_click),NULL);
        //确定按钮(button1)单击事件
        g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(button1_click),NULL);
        return fixed;
    }
     
    GtkWidget *create_window() //创建窗体和控件!!
    {
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        GtkWidget *fixed;
         
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); //窗体大小
        gtk_window_set_title(GTK_WINDOW(window),"精美窗体测试"); //标题栏
        gtk_window_set_decorated(GTK_WINDOW(window),FALSE); //去掉窗口标题栏
        //添加窗体事件掩码 GDK_BUTTON...MASK按下任何按键的时候,接收鼠标运动的事件!!
        gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
         
         
        fixed  = create_fixed(); //新建任意布局控件和布局上的控件内容
        //将fixed任意布局控件添加到最顶层窗体window!!
        gtk_container_add(GTK_CONTAINER(window), fixed);
         
        //为一个特定的对象(wnidow)链接返回函数(button_press)!!
        g_signal_connect(G_OBJECT(window), "button-press-event",
                    G_CALLBACK(button_press), NULL);
        //为一个特定的对象(window)链接返回函数(gtk_main_quit)!!
        g_signal_connect_swapped(G_OBJECT(window), "destroy",
                    G_CALLBACK(gtk_main_quit), G_OBJECT(window));
        return window;
    }
     
    //button-pree-event响应函数
    gboolean button_press(GtkWidget *widget,GdkEventButton *event,gint data)
    {
        if(event->type == GDK_BUTTON_PRESS) //判断鼠标是否被按下
        {
            if(event->button == 1)// 1代表鼠标左键!! 2 鼠标中间那个东东!! 3 就是剩下的那个!!
            {   //gtk_widget_get_toplevel 返回顶层窗口 就是window!!
                gtk_window_begin_move_drag(GTK_WINDOW(gtk_widget_get_toplevel(widget)), event->button,
                        event->x_root, event->y_root,event->time);
            }
        }
    }
    /*  gtk_window_begin_move_drag
        移动窗体!!第一个参数: GtkWindow *window
               第二个参数: gint button
              第三个参数: gint root_x
             第四个参数: gint root_y
            第五.....: guint32 timestamp 参考 GdkEventButton 结构体
             
       GdkEventButton 结构体
       typedef struct {
            GdkEventType type;
            GdkWindow *window;
            gint8 send_event;
            guint32 time;
            gdouble x;
            gdouble y;
            gdouble *axes;
            guint state;
            guint button;
            GdkDevice *device;
            gdouble x_root, y_root;
       } GdkEventButton;
    */
    

      

  • 相关阅读:
    java soket 和nio
    面试题中问到 aop di ioc 怎么回答
    细谈hashmap
    java中length和length()还有size()的区别
    MySQL 中实现可重复读(RR)的原理--MVCC
    关于字节流/字符流操作文件的问题
    MySQL 中索引优化(即避免索引失效)
    MySQL 数据库中索引的实现 和 建立索引的原则
    CAS和ABA问题
    Volatile的简单理解
  • 原文地址:https://www.cnblogs.com/chaosi/p/4236111.html
Copyright © 2011-2022 走看看