-1
#include "UI.h"

GtkWidget* create_main_frame(gint wid, gint hgt) 
{
    GtkWidget* main_frame = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /* window attributes */
    gtk_window_set_title( GTK_WINDOW(main_frame), "Welcome!!" );
    gtk_window_set_default_size( GTK_WINDOW(main_frame), wid, hgt );

    /* signals */
    g_signal_connect(main_frame, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    return main_frame;  
}

GtkWidget* create_scrolled_window(void)
{
    GtkWidget* scrolled_window = gtk_scrolled_window_new(NULL, NULL);

    gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS );
    gtk_container_set_border_width( GTK_CONTAINER(scrolled_window), 10 );

    return scrolled_window;
}

GtkWidget* create_box(GtkOrientation orn, gint spc)
{
    GtkWidget* box = gtk_box_new(orn, spc);

    //gtk_container_set_border_width( GTK_CONTAINER(box), 5 );

    return box;
}

GtkWidget* create_layout(guint wid, guint hgt)
{
    GtkWidget* layout = gtk_layout_new(NULL, NULL);

    gtk_layout_set_size( GTK_LAYOUT(layout), wid, hgt );    

    return layout;
}

GtkWidget* create_grid(guint rsp, guint csp)
{
    GtkWidget* grid = gtk_grid_new();

    gtk_grid_set_row_spacing( GTK_GRID(grid), rsp );
    gtk_grid_set_column_spacing( GTK_GRID(grid), csp );

    return grid;
}
/*
GtkWidget* create_token_button(Token* tkn)
{
    char parsed_value[11];
    char* string = parse_to_string(tkn -> value, parsed_value); 
    GtkWidget* button = gtk_button_new_with_label(value);

    //gtk_signal_connect(button, "clicked", G_CALLBACK, );

    return button;
}
*/

GtkWidget* create_commodity_button(Commodity* com)
{
    GtkWidget* button = gtk_button_new_with_label(com -> name);

    //gtk_signal_connect(button, "clicked", G_CALLBACK, );

    return button;  
}


#include "UI.h"

int main(int argc, char* argv[])
{
    int i, j;
    /* vending machine */
    VendingMachine* vending_machine; 

    /* frames */
    GtkWidget* main_frame;
    GtkWidget* scrolled_window;
    GtkWidget* commodity_box, * commodity_layout, * commodity_grid, * commodity_button;

    /* initialize */
    gtk_init(&argc, &argv);
    make_new_vending_machine_memory(&vending_machine, sizeof(VendingMachine) ); 
    boot_vending_machine(vending_machine, 13, 13);

    /* setting main frame */
    main_frame = create_main_frame(1000, 750);

    /* setting commodty frames and button table */
    commodity_box = create_box(GTK_ORIENTATION_HORIZONTAL, 10);
    scrolled_window = create_scrolled_window();
    commodity_layout = create_layout(500, 700);
    commodity_grid = create_grid(10, 10);

    for (i = 0; i < 13; i++)
        for (j = 0; j < 13; j++) {
                commodity_button = create_commodity_button(&vending_machine -> commodity[i][j]);
            gtk_grid_attach( GTK_GRID(commodity_grid), commodity_button, i * 300, j * 300, 5, 7 );
        }

    /* start adding and packing */
    gtk_layout_put( GTK_LAYOUT(commodity_layout), commodity_grid, 10, 10 );
    gtk_container_add( GTK_CONTAINER(scrolled_window), commodity_layout );
    gtk_box_pack_start( GTK_BOX(commodity_box), scrolled_window, TRUE, TRUE, 10 );
    gtk_container_add( GTK_CONTAINER(main_frame), commodity_box );

    /* show all */
    gtk_widget_show_all(main_frame);

    gtk_main();

    return 0;
}

我已经完成了小型自动售货机项目所需的基本功能的编写。

现在,我正在尝试用 GTK+ 的功能制作 UI。我很困惑,因为

这是我第一次真正使用 GTK。

我想要一个应该显示在左侧的商品按钮网格,但我得到了

几乎停留在这部分。我想做的是,因为我“malloc”了商品

为了添加和删除通讯,我想要一个滚动条附加到通讯窗口。

正如您在源代码中看到的那样,我做了什么

  1. 我制作了一个通讯按钮网格并添加到布局小部件上。
  2. 我在滚动条小部件上添加了布局
  3. 我在一个盒子上添加了那个滚动条并打包了它。
  4. 我将该框添加到主窗口。

结果很好“不满意”

我正在努力通过 GNOME 官方 API

有人可以帮我吗?

4

1 回答 1

1

如果您看不到如何创建用户界面,请尝试Glade 。您将能够快速尝试并查看小部件如何组合在一起。

于 2013-08-12T23:45:32.973 回答