-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 に答える