<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                這一章節介紹范圍控件的一些基本函數的使用和實現,很多函數的細節,在GTK編程文檔中有詳細的介紹。我只是照抄了文檔中的實例。當然生疏的部分自己也做了注釋和理解。GTK文檔鏈接在我的資源[里面可以下載](http://download.csdn.net/detail/jsh13417/6567043) ### 下面是范圍控件的具體實例代碼: ~~~ /*File:range_controls.c *Date:2013-12-08 *Author:sjin *Mail:413977243@qq.com */ #include <stdio.h> #include <gtk/gtk.h> #include <stdlib.h> /*范圍控件: * 由一般按鈕派生而來,只是開關按鈕只有兩個狀態,通過點擊 * 可以切換。 * 開關按鈕是復選按鈕和單選按鈕的基礎,所以單選按鈕和復選按鈕繼承了 * 許多開關按鈕的函數調用 */ GtkWidget *hscale,*vscale; void cb_pos_menu_select(GtkWidget *item,GtkPositionType pos) { /*設置兩個比例構件的比例值的顯示位置 *void gtk_scale_set_value_pos(GtkScale * scale,:比例構件 * GtkPositionType pos);:顯示對象的位置 * GTK_POS_TOP * GTK_POS_RIGHT * GTK_POS_BOTTOM * GTK_POS_LEFT * */ printf("###%s,pos = %d \n",__func__,pos); gtk_scale_set_value_pos(GTK_SCALE(hscale),pos); gtk_scale_set_value_pos(GTK_SCALE(vscale),pos); } void cb_update_menu_select(GtkWidget *item,GtkUpdateType Policy) { /*設置兩個比例控件的更新方式 *void gtk_range_set_update_policy(GtkRange *range,GtkUpdateType Policy); *range : 范圍控件 *Policy :更新方式,有以下三個 * GTK_UPDATE_CONTINUOUS:信號時連續引發的 * GTK_UPDATE_DISCONTINUOUS:只有滑塊停止移動,用戶釋放鼠標時才引發 * GTK_UPDATE_DELAYED:當用戶釋放鼠標,或者滑塊短期停止移動時引發 * * */ gtk_range_set_update_policy(GTK_RANGE(hscale),Policy); gtk_range_set_update_policy(GTK_RANGE(vscale),Policy); } void cb_digits_scale(GtkAdjustment *adj) { /*設置 小數的位數 *gtk_scale_set_digits(GtkScale *scale,gint Digits) *參數:scale:比例構件對象 * Digits:要顯示小數位數,最大13 * */ gtk_scale_set_digits(GTK_SCALE(hscale),(gint)adj->value); gtk_scale_set_digits(GTK_SCALE(vscale),(gint)adj->value); } void cb_page_size(GtkAdjustment * get,GtkAdjustment * set) { /*將實例調整對象的page_size,和page_increment size設置為“page Size” *比例控件指定的數值。 */ set->page_size = get->value; set->page_increment = get->value; /*設置調整對象的值并使它引發一個“changed"信號,以重新配置所有已連接到這個調整對象的構件 */ gtk_adjustment_set_value(set,CLAMP(set->value,set->lower,(set->upper-set->page_size))); } void cb_draw_value(GtkToggleButton * button) { /*根據復選框的狀態設置在比例構件上是否顯示比例值 *TRUE :顯示 FALSE:不顯示 * */ gtk_scale_set_draw_value(GTK_SCALE(hscale),button->active); gtk_scale_set_draw_value(GTK_SCALE(vscale),button->active); } GtkWidget * make_menu_item(gchar *name,GCallback callback,gpointer data) { GtkWidget *item; item = gtk_menu_item_new_with_label(name); g_signal_connect(G_OBJECT(item),"activate",callback,data); gtk_widget_show(item); return item; } /*設置比例控件默認方式*/ void scale_set_default_values(GtkScale * scale) { gtk_range_set_update_policy(GTK_RANGE(scale),GTK_UPDATE_CONTINUOUS); gtk_scale_set_digits(scale,1); gtk_scale_set_value_pos(scale,GTK_POS_TOP); gtk_scale_set_draw_value(scale,TRUE); } /*創建示例窗口*/ static void create_range_controls() { GtkWidget *window; GtkWidget *button; /*box1:縱向組裝盒子 * */ GtkWidget *box1,*box2,*box3; GtkWidget *scrollbar; GtkWidget *separator; GtkWidget *opt,*menu,*item; GtkWidget *label; GtkWidget *scale; GtkWidget *adj1,*adj2; /************標準的窗口代碼**********/ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /*這個一般必要有delete_event信號到主窗口*/ g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL); /*設置窗口寬度*/ gtk_container_set_border_width(GTK_CONTAINER(window),20); /*設置窗口標題*/ gtk_window_set_title(GTK_WINDOW(window),"范圍控件練習"); /******************************/ /*創建一個縱向組裝盒子*/ box1 = gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),box1); gtk_widget_show(box1); /*創建一個橫向組裝盒子*/ box2 = gtk_hbox_new(FALSE,0); gtk_container_set_border_width(GTK_CONTAINER(box2),10); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); /*創建一個調整對象 * GtkObject *gtk_adjustment_new(gdouble value,調整對象的初始值,通常是最高或者最低位置 * gdouble lower,調整對象能取得的最低值 * gdouble upper,用于分欄構件最底部或最右邊的坐標 * gdouble step_increment,小步調整的值 * gdouble page_increment,大步調整的值 * gdouble page_size);分欄構件的可視區域 * */ adj1 = gtk_adjustment_new(0.0,0.0,101.0,0.1,1.0,1.0); /*創建一個垂直比例控件*/ vscale = gtk_vscale_new(GTK_ADJUSTMENT(adj1)); scale_set_default_values(GTK_SCALE(vscale)); gtk_box_pack_start(GTK_BOX(box2),vscale,TRUE,TRUE,0); gtk_widget_show(vscale); /*創建一個縱向組裝盒子,并加入2個水平比例控件*/ box3 = gtk_vbox_new(FALSE,10); gtk_box_pack_start(GTK_BOX(box2),box3,TRUE,TRUE,0); gtk_widget_show(box3); /*創建一個水平比例控件*/ hscale = gtk_hscale_new(GTK_ADJUSTMENT(adj1)); /*設置控件的寬度和高度*/ gtk_widget_set_size_request(GTK_WIDGET(hscale),200,-1); scale_set_default_values(GTK_SCALE(hscale)); gtk_box_pack_start(GTK_BOX(box3),hscale,TRUE,TRUE,0); gtk_widget_show(hscale); /*創建一個滑動條*/ scrollbar = gtk_hscrollbar_new(GTK_ADJUSTMENT(adj1)); /*注意: * 這導致當滾動條移動時,比例構件總是連續更新 * */ gtk_range_set_update_policy(GTK_RANGE(scrollbar),GTK_UPDATE_CONTINUOUS); gtk_box_pack_start(GTK_BOX(box3),scrollbar,TRUE,TRUE,0); gtk_widget_show(scrollbar); box2 = gtk_hbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),10); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); /*用一個復選框控制是否顯示比較構件的當前的數值*/ button = gtk_check_button_new_with_label("Display value on scale widgets"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),TRUE); g_signal_connect(G_OBJECT(button),"toggled",G_CALLBACK(cb_draw_value),NULL); gtk_box_pack_start(GTK_BOX(box2),button,TRUE,TRUE,0); gtk_widget_show(button); box2 = gtk_hbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),10); /*用一個選項菜單以改變顯示值的位置*/ label = gtk_label_new("Scale Value Position"); gtk_box_pack_start(GTK_BOX(box2),label,FALSE,FALSE,0); gtk_widget_show(label); opt = gtk_option_menu_new(); menu = gtk_menu_new(); item = make_menu_item("TOP",G_CALLBACK(cb_pos_menu_select),GINT_TO_POINTER(GTK_POS_TOP)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); item = make_menu_item("BUTTOM",G_CALLBACK(cb_pos_menu_select),GINT_TO_POINTER(GTK_POS_BOTTOM)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); item = make_menu_item("RIGHT",G_CALLBACK(cb_pos_menu_select),GINT_TO_POINTER(GTK_POS_RIGHT)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); item = make_menu_item("LEFT",G_CALLBACK(cb_pos_menu_select),GINT_TO_POINTER(GTK_POS_LEFT)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); gtk_option_menu_set_menu(GTK_OPTION_MENU(opt),menu); gtk_box_pack_start(GTK_BOX(box2),opt,TRUE,TRUE,0); gtk_widget_show(opt); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); box2 = gtk_hbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),0); /*設置比例構件的更新方式*/ label = gtk_label_new("Scale Update Policy:"); gtk_box_pack_start(GTK_BOX(box2),label,TRUE,TRUE,0); gtk_widget_show(label); opt = gtk_option_menu_new(); menu = gtk_menu_new(); item = make_menu_item("Continuous",G_CALLBACK(cb_update_menu_select),GINT_TO_POINTER(GTK_UPDATE_CONTINUOUS)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); item = make_menu_item("Discontinuous",G_CALLBACK(cb_update_menu_select),GINT_TO_POINTER(GTK_UPDATE_DISCONTINUOUS)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); item = make_menu_item("Delayed",G_CALLBACK(cb_update_menu_select),GINT_TO_POINTER(GTK_UPDATE_DELAYED)); gtk_menu_shell_append(GTK_MENU_SHELL(menu),item); gtk_option_menu_set_menu(GTK_OPTION_MENU(opt),menu); gtk_box_pack_start(GTK_BOX(box2),opt,TRUE,TRUE,0); gtk_widget_show(opt); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); box2 = gtk_hbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),10); /*用于調整比例構件小數位數*/ label = gtk_label_new("Scale Digits:"); gtk_box_pack_start(GTK_BOX(box2),label,FALSE,FALSE,0); gtk_widget_show(label); adj2 = gtk_adjustment_new(1.0,0.0,5.0,1.0,1.0,0.0); g_signal_connect(G_OBJECT(adj2),"value_changed",G_CALLBACK(cb_digits_scale),NULL); scale = gtk_hscale_new(GTK_ADJUSTMENT(adj2)); gtk_scale_set_digits(GTK_SCALE(scale),0); gtk_box_pack_start(GTK_BOX(box2),scale,TRUE,TRUE,0); gtk_widget_show(scale); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); box2 = gtk_hbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),10); /*用于調整水平比例構件滾動條的page size */ label = gtk_label_new("Scrollbar Page Size:"); gtk_box_pack_start(GTK_BOX(box2),label,FALSE,FALSE,0); gtk_widget_show(label); adj2 = gtk_adjustment_new(1.0,1.0,110.0,1.0,1.0,0.0); g_signal_connect(G_OBJECT(adj2),"value_changed",G_CALLBACK(cb_page_size),adj1); scale = gtk_hscale_new(GTK_ADJUSTMENT(adj2)); gtk_scale_set_digits(GTK_SCALE(scale),0); gtk_box_pack_start(GTK_BOX(box2),scale,TRUE,TRUE,0); gtk_widget_show(scale); gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0); gtk_widget_show(box2); /*創建一個分割線*/ separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(box1),separator,FALSE,TRUE,0); gtk_widget_show(separator); box2 = gtk_vbox_new(FALSE,10); gtk_container_set_border_width(GTK_CONTAINER(box2),10); gtk_box_pack_start(GTK_BOX(box1),box2,FALSE,TRUE,0); gtk_widget_show(box2); /*創建一個退出按鈕*/ button = gtk_button_new_with_label("Quit"); g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(gtk_main_quit),NULL); gtk_box_pack_start(GTK_BOX(box2),button,TRUE,TRUE,0); /*將退出按鈕固定為缺省,只要按回車鍵就能觸發*/ GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); gtk_widget_show(window); } int main(int argc,char *argv[]) { gtk_init(&argc,&argv); /*創建范圍控件*/ create_range_controls(); gtk_main(); return 0; } ~~~ 執行后: ![](https://box.kancloud.cn/2016-08-24_57bd77974917b.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看