Ограничить высоту всплывающего окна GtkComboBox - PullRequest
1 голос
/ 19 ноября 2011

Я нашел способ ограничения высоты всплывающего окна для GtkComboBox, и когда эта высота будет достигнута, элемент управления получит полосы прокрутки. Я не могу найти способ сделать это. список движется сверху вниз окна (попробуйте прикрепленный код). Я проверил API и не могу найти полезный метод. Я новичок в GTK +, и я искал Google в течение нескольких дней.

#include <gtk/gtk.h>  

int main(int argc, char** argv) {
    GtkWidget* frame;//main frame
    GtkWidget* combobox;
    GtkWidget* listbox;
    GtkWidget* okbutton;
    GtkWidget* cancelbutton;
    GtkWidget* hbox_buttons;
    GtkWidget* vbox;

    gtk_init(&argc, &argv);
    //create widgets
    frame = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /*Combobox issues*/
    GtkListStore* list_store;
    list_store = NULL;
    GtkTreeIter iter;
    list_store=gtk_list_store_new(1,G_TYPE_STRING);
    int i;
    for(i=0; i<100; i++) {  
        gtk_list_store_append(list_store, &iter);
        gtk_list_store_set(list_store, &iter,0,"Residental", -1);
    }
    combobox = gtk_combo_box_new_with_model((GtkTreeModel *)list_store);
    g_object_unref(G_OBJECT(list_store));
    GtkCellRenderer* cell = gtk_cell_renderer_text_new();
    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), cell, TRUE);
    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), cell, "text", 0, NULL);


    listbox = gtk_list_new();
    okbutton = gtk_button_new_with_label("Ok");
    cancelbutton = gtk_button_new_with_label("Cancel");
    //create containers
    hbox_buttons = gtk_hbox_new(FALSE, 5);
    vbox = gtk_vbox_new(FALSE, 5);

    //Pack things
    gtk_container_add(GTK_CONTAINER(frame),vbox);
    gtk_box_pack_start(GTK_BOX(vbox), combobox, FALSE, FALSE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), listbox, TRUE, TRUE, 5);
    //pack buttons
    gtk_box_pack_start(GTK_BOX(hbox_buttons), okbutton, TRUE, TRUE, 5);
    gtk_box_pack_start(GTK_BOX(hbox_buttons), cancelbutton, TRUE, TRUE, 5);
    gtk_box_pack_start(GTK_BOX(vbox), hbox_buttons, FALSE, TRUE, 5);
    //gtk_box_pack_start(vbox, listbox, TRUE, TRUE, 5);
    g_signal_connect_swapped(G_OBJECT(frame), "destroy",
                             G_CALLBACK(gtk_main_quit), G_OBJECT(frame));

    gtk_widget_show_all(frame);

    gtk_main();


    return 0;
}

1 Ответ

1 голос
/ 20 декабря 2011

Это невозможно, поэтому я использовал wxComboCtrl , который очень настраиваем!

...