亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gtk_tut-13.html

?? GTK development guide
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
    gtk_init (&argc, &argv);

    /* create a new window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_set_usize (GTK_WIDGET (window), 200, 100);
    gtk_window_set_title (GTK_WINDOW (window), "GTK Menu Test");
    gtk_signal_connect (GTK_OBJECT (window), "delete_event",
                        (GtkSignalFunc) gtk_main_quit, NULL);

    /* Init the menu-widget, and remember -- never
     * gtk_show_widget() the menu widget!! 
     * This is the menu that holds the menu items, the one that
     * will pop up when you click on the "Root Menu" in the app */
    menu = gtk_menu_new ();

    /* Next we make a little loop that makes three menu-entries for "test-menu".
     * Notice the call to gtk_menu_append.  Here we are adding a list of
     * menu items to our menu.  Normally, we'd also catch the "clicked"
     * signal on each of the menu items and setup a callback for it,
     * but it's omitted here to save space. */

    for (i = 0; i < 3; i++)
        {
            /* Copy the names to the buf. */
            sprintf (buf, "Test-undermenu - %d", i);

            /* Create a new menu-item with a name... */
            menu_items = gtk_menu_item_new_with_label (buf);

            /* ...and add it to the menu. */
            gtk_menu_append (GTK_MENU (menu), menu_items);

            /* Do something interesting when the menuitem is selected */
            gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate",
                GTK_SIGNAL_FUNC (menuitem_response), (gpointer) g_strdup (buf));

            /* Show the widget */
            gtk_widget_show (menu_items);
        }

    /* This is the root menu, and will be the label
     * displayed on the menu bar.  There won't be a signal handler attached,
     * as it only pops up the rest of the menu when pressed. */
    root_menu = gtk_menu_item_new_with_label ("Root Menu");

    gtk_widget_show (root_menu);

    /* Now we specify that we want our newly created "menu" to be the menu
     * for the "root menu" */
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);

    /* A vbox to put a menu and a button in: */
    vbox = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), vbox);
    gtk_widget_show (vbox);

    /* Create a menu-bar to hold the menus and add it to our main window */
    menu_bar = gtk_menu_bar_new ();
    gtk_box_pack_start (GTK_BOX (vbox), menu_bar, FALSE, FALSE, 2);
    gtk_widget_show (menu_bar);

    /* Create a button to which to attach menu as a popup */
    button = gtk_button_new_with_label ("press me");
    gtk_signal_connect_object (GTK_OBJECT (button), "event",
        GTK_SIGNAL_FUNC (button_press), GTK_OBJECT (menu));
    gtk_box_pack_end (GTK_BOX (vbox), button, TRUE, TRUE, 2);
    gtk_widget_show (button);

    /* And finally we append the menu-item to the menu-bar -- this is the
     * "root" menu-item I have been raving about =) */
    gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), root_menu);

    /* always display the window as the last step so it all splashes on
     * the screen at once. */
    gtk_widget_show (window);

    gtk_main ();

    return(0);
}

/* Respond to a button-press by posting a menu passed in as widget.
 *
 * Note that the "widget" argument is the menu being posted, NOT
 * the button that was pressed.
 */

static gint button_press( GtkWidget *widget,
                          GdkEvent *event )
{

    if (event->type == GDK_BUTTON_PRESS) {
        GdkEventButton *bevent = (GdkEventButton *) event; 
        gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL,
                        bevent->button, bevent->time);
        /* Tell calling code that we have handled this event; the buck
         * stops here. */
        return TRUE;
    }

    /* Tell calling code that we have not handled this event; pass it on. */
    return FALSE;
}


/* Print a string when a menu item is selected */

static void menuitem_response( gchar *string )
{
    printf ("%s\n", string);
}
/* example-end */
</PRE>
</CODE></BLOCKQUOTE>
<P>You may also set a menu item to be insensitive and, using an accelerator
table, bind keys to menu functions.
<P>
<H2><A NAME="ss13.3">13.3 Using ItemFactory</A>
</H2>

<P>Now that we've shown you the hard way, here's how you do it using the
gtk_item_factory calls.
<P>
<H2><A NAME="ss13.4">13.4 Item Factory Example</A>
</H2>

<P>Here is an example using the GTK item factory.
<P>
<BLOCKQUOTE><CODE>
<PRE>
/* example-start menu itemfactory.c */

#include &lt;gtk/gtk.h>
#include &lt;strings.h>

/* Obligatory basic callback */
static void print_hello( GtkWidget *w,
                         gpointer   data )
{
  g_message ("Hello, World!\n");
}

/* This is the GtkItemFactoryEntry structure used to generate new menus.
   Item 1: The menu path. The letter after the underscore indicates an
           accelerator key once the menu is open.
   Item 2: The accelerator key for the entry
   Item 3: The callback function.
   Item 4: The callback action.  This changes the parameters with
           which the function is called.  The default is 0.
   Item 5: The item type, used to define what kind of an item it is.
           Here are the possible values:

           NULL               -> "&lt;Item>"
           ""                 -> "&lt;Item>"
           "&lt;Title>"          -> create a title item
           "&lt;Item>"           -> create a simple item
           "&lt;CheckItem>"      -> create a check item
           "&lt;ToggleItem>"     -> create a toggle item
           "&lt;RadioItem>"      -> create a radio item
           &lt;path>             -> path of a radio item to link against
           "&lt;Separator>"      -> create a separator
           "&lt;Branch>"         -> create an item to hold sub items (optional)
           "&lt;LastBranch>"     -> create a right justified branch 
*/

static GtkItemFactoryEntry menu_items[] = {
  { "/_File",         NULL,         NULL, 0, "&lt;Branch>" },
  { "/File/_New",     "&lt;control>N", print_hello, 0, NULL },
  { "/File/_Open",    "&lt;control>O", print_hello, 0, NULL },
  { "/File/_Save",    "&lt;control>S", print_hello, 0, NULL },
  { "/File/Save _As", NULL,         NULL, 0, NULL },
  { "/File/sep1",     NULL,         NULL, 0, "&lt;Separator>" },
  { "/File/Quit",     "&lt;control>Q", gtk_main_quit, 0, NULL },
  { "/_Options",      NULL,         NULL, 0, "&lt;Branch>" },
  { "/Options/Test",  NULL,         NULL, 0, NULL },
  { "/_Help",         NULL,         NULL, 0, "&lt;LastBranch>" },
  { "/_Help/About",   NULL,         NULL, 0, NULL },
};


void get_main_menu( GtkWidget  *window,
                    GtkWidget **menubar )
{
  GtkItemFactory *item_factory;
  GtkAccelGroup *accel_group;
  gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);

  accel_group = gtk_accel_group_new ();

  /* This function initializes the item factory.
     Param 1: The type of menu - can be GTK_TYPE_MENU_BAR, GTK_TYPE_MENU,
              or GTK_TYPE_OPTION_MENU.
     Param 2: The path of the menu.
     Param 3: A pointer to a gtk_accel_group.  The item factory sets up
              the accelerator table while generating menus.
  */

  item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "&lt;main>", 
                                       accel_group);

  /* This function generates the menu items. Pass the item factory,
     the number of items in the array, the array itself, and any
     callback data for the the menu items. */
  gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);

  /* Attach the new accelerator group to the window. */
  gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);

  if (menubar)
    /* Finally, return the actual menu bar created by the item factory. */ 
    *menubar = gtk_item_factory_get_widget (item_factory, "&lt;main>");
}

int main( int argc,
          char *argv[] )
{
  GtkWidget *window;
  GtkWidget *main_vbox;
  GtkWidget *menubar;
  
  gtk_init (&amp;argc, &amp;argv);
  
  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_signal_connect (GTK_OBJECT (window), "destroy", 
                      GTK_SIGNAL_FUNC (gtk_main_quit), 
                      "WM destroy");
  gtk_window_set_title (GTK_WINDOW(window), "Item Factory");
  gtk_widget_set_usize (GTK_WIDGET(window), 300, 200);
  
  main_vbox = gtk_vbox_new (FALSE, 1);
  gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
  gtk_container_add (GTK_CONTAINER (window), main_vbox);
  gtk_widget_show (main_vbox);
  
  get_main_menu (window, &amp;menubar);
  gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0);
  gtk_widget_show (menubar);
  
  gtk_widget_show (window);
  gtk_main ();
  
  return(0);
}
/* example-end */
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>For now, there's only this example. An explanation and lots 'o' comments
will follow later.
<P>
<HR>
<A HREF="gtk_tut-14.html">Next</A>
<A HREF="gtk_tut-12.html">Previous</A>
<A HREF="gtk_tut.html#toc13">Contents</A>
</BODY>
</HTML>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精油按摩中文字幕久久| 国产色综合一区| 日韩专区一卡二卡| 91精品国产综合久久香蕉麻豆| 日一区二区三区| 精品久久人人做人人爱| 国产精品一区2区| 日韩一区在线免费观看| 色婷婷久久久综合中文字幕| 舔着乳尖日韩一区| 精品国产91九色蝌蚪| 国产精品77777| 一区二区三区在线视频免费| 精品视频在线看| 久久er精品视频| 中文字幕精品综合| 欧洲一区在线观看| 精品亚洲aⅴ乱码一区二区三区| 亚洲国产精品传媒在线观看| 一本到一区二区三区| 蜜臀久久久99精品久久久久久| 2014亚洲片线观看视频免费| 99精品国产热久久91蜜凸| 三级在线观看一区二区| 国产清纯白嫩初高生在线观看91 | 成人激情免费电影网址| 一区av在线播放| 亚洲精品一区二区三区四区高清| 国产aⅴ综合色| 亚洲成人一区二区| 国产欧美精品一区二区色综合朱莉| 色综合激情五月| 国产在线精品一区在线观看麻豆| 亚洲免费在线观看| 日韩欧美一区电影| 色综合久久88色综合天天6| 久久成人久久鬼色| 夜夜嗨av一区二区三区中文字幕| 精品国产免费一区二区三区香蕉| 在线精品视频免费播放| 国产成人在线视频网站| 免费在线观看视频一区| 一区二区三区波多野结衣在线观看| 欧美一级欧美一级在线播放| 色哟哟一区二区在线观看| 国产一区二区三区av电影| 日韩精品每日更新| 亚洲精品videosex极品| 亚洲国产高清在线| 久久这里只有精品6| 91精品国产福利在线观看 | 精品一区二区三区不卡| 香蕉成人啪国产精品视频综合网| 国产精品视频九色porn| 日韩免费看网站| 欧美精品在线观看一区二区| 91丨九色丨尤物| 盗摄精品av一区二区三区| 免费欧美在线视频| 亚洲电影中文字幕在线观看| 一区二区三区精品| 亚洲欧洲综合另类| 亚洲国产精品成人久久综合一区| 精品奇米国产一区二区三区| 制服丝袜国产精品| 欧洲一区在线观看| 欧美影院一区二区三区| 99久久久精品| 97久久人人超碰| 91蜜桃免费观看视频| 91在线免费看| 色婷婷av一区| 欧美视频一区二区三区在线观看| 色婷婷一区二区| 日本久久精品电影| 日本高清不卡一区| 欧美少妇xxx| 欧美精品一二三| 欧美一区二区三区在线看| 91精品久久久久久蜜臀| 7777精品伊人久久久大香线蕉的 | 日韩欧美国产一二三区| 日韩欧美电影在线| 欧美白人最猛性xxxxx69交| 日韩欧美你懂的| 久久精品亚洲精品国产欧美| 欧美激情自拍偷拍| 国产精品久久久久久久久免费丝袜| 国产免费观看久久| 亚洲人成网站影音先锋播放| 一区二区三区精品在线观看| 亚洲国产日韩综合久久精品| 天堂久久一区二区三区| 美国精品在线观看| 国产高清视频一区| 99视频有精品| 欧美日韩一区二区在线观看| 欧美一区二区三区白人| 2019国产精品| 国产精品成人网| 亚洲成人一二三| 国产一区二区三区在线观看免费| 成人免费视频视频| 欧洲中文字幕精品| 欧美videos中文字幕| 中文字幕永久在线不卡| 亚洲自拍都市欧美小说| 久久疯狂做爰流白浆xx| 成人h版在线观看| 欧美精品少妇一区二区三区| 久久久国产精品麻豆| 一区二区视频免费在线观看| 日本va欧美va欧美va精品| 国产成人av一区二区三区在线| 一本大道久久a久久综合| 日韩精品一区二区在线观看| 国产精品色哟哟网站| 亚洲妇女屁股眼交7| 国产精品亚洲专一区二区三区| 欧美综合亚洲图片综合区| 亚洲精品在线观| 亚洲成人av电影在线| 国产a区久久久| 91精品久久久久久久91蜜桃| 中文字幕一区二区三区色视频| 日本亚洲电影天堂| 91亚洲永久精品| 欧美xxxxx裸体时装秀| 亚洲一二三区不卡| 成人免费av在线| 精品少妇一区二区三区视频免付费 | 国产网站一区二区三区| 亚洲va欧美va天堂v国产综合| 国产成人免费视频网站高清观看视频| 欧美网站一区二区| 国产精品福利在线播放| 国精产品一区一区三区mba桃花 | 日韩欧美综合一区| 亚洲日本在线a| 成人精品视频.| 精品国产sm最大网站免费看| 丝袜a∨在线一区二区三区不卡| 成人18视频在线播放| 久久久精品免费网站| 日本女人一区二区三区| 91国产丝袜在线播放| 中文字幕久久午夜不卡| 国产精品18久久久久久久网站| 欧美一区二区日韩一区二区| 亚洲高清免费观看高清完整版在线观看| 99久久久久久99| 国产精品久久久久久一区二区三区| 国产老妇另类xxxxx| 精品成人私密视频| 激情另类小说区图片区视频区| 这里只有精品99re| 日韩精彩视频在线观看| 欧美日韩国产精选| 丝袜美腿高跟呻吟高潮一区| 欧美日韩国产经典色站一区二区三区 | 色婷婷一区二区三区四区| 国产精品久久久久四虎| 成人一区二区三区中文字幕| 国产亚洲成年网址在线观看| 国产一区不卡精品| ww久久中文字幕| 国产精品中文有码| 国产亚洲精品7777| 处破女av一区二区| 亚洲婷婷综合久久一本伊一区| 99在线热播精品免费| 一区二区三区不卡在线观看 | 91高清在线观看| 亚洲精品免费电影| 欧美性大战久久久久久久蜜臀| 一区二区激情视频| 91麻豆精品国产91久久久 | 欧美日韩另类国产亚洲欧美一级| 午夜精品福利视频网站| 日韩一二三区不卡| 激情综合亚洲精品| 中文av字幕一区| 欧洲一区在线观看| 青青草原综合久久大伊人精品| 日韩精品一区二区三区中文精品| 国产一区二区免费在线| 国产精品人成在线观看免费 | 偷窥国产亚洲免费视频| 日韩欧美国产麻豆| 国产成人免费视频一区| 亚洲精品精品亚洲| 欧美一区二区免费| 国产精品一区久久久久| 18欧美亚洲精品| 欧美网站大全在线观看| 黄色成人免费在线| 亚洲女爱视频在线| 日韩亚洲欧美一区| 99久久国产综合色|国产精品| 亚洲一区二区3|