実践Linux                 TOPへ  Cプログラミング目次へ

Glade2/GTK+  2009年5月更新

●自動描画

アプリケーション→プログラミング→Gladeを起動して、新規→GTK+プロジェクト

 まず基本ウィジットで「ウィンド」を押して、ウィンドをつくる。
 「垂直ボックス」で3行に分割。(内部ウィンド)
 上段に「メニューバー」(今回はなにもしない飾りだけのもの)。
 中段に「ドローイング・エリア」。
 下段は「フィックスド・コンテナ」。
 それぞれプロパティの共有で幅や高さを設定してやる。
 下段のフィックスド・コンテナにはさらに「ラベル」や「テキスト・エントリ」、「ボタン」等を配置。
 テキスト・エントリにはプロパティのシグナルに「changed」を設定。
 ボタンにはプロパティのシグナルに「button_press_event」を設定。

作成したら
 @保存 プログラム名を適当に記入
 Aビルドでソース等の書き出し
 BMakefileを自動的に作る
   # cd /root/project/project*
   # sh autogen.sh
 Cconfig.hファイルの編集
   パッケージの名称
   バージョン
 D srcディレクトリに入り
   # make
 この過程で誤りがあれば修正して autogen.sh からやり直す。

基本的に、次の3つのファイルを編集し完成させていく。
 main.c
 interface.c ウィンドを作ったりウィジットの配置等。
 callback.c  ボタンが押された等のイベント処理。



プログラムのダウンロード

実行ファイルはsrc/project1です。

システムに合わせて、フォントを入れ替えてやる必要があります。
 伝統的なコアXフォントを利用しています。
 src/callbacks.cを編集して、フォントを設定しなおしてください(冒頭の#defineの部分)。

 xlsfontsコマンド等で表示されるフォントから、適切なフォントを選んで設定してください。
 フォントについては、こちらを参照。

 フォントを設定しなおしたら、同ディレクトリ(srcディレクトリ)内でmakeを実行します。
 実行ファイルproject2が更新されたら、これをダブルクリックして実行してみます。
 うまく表示されないときは、また別のフォントで試してみてください。


●プログラム・ソース

上図のような各ウィジットを配置。
上のメニューバーは今回はなにもしない飾りだけ。
下のテキストエントリに入力した文字が表示される。
startボタンでアニメの開始。
stopボタンでアニメの一時停止。
終了ボタンで終了。

赤字箇所は編集した場所。

main.c ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <gtk/gtk.h>

#include “interface.h”
#include “support.h”

#include “callbacks.h”

int
main (int argc, char *argv[])
{
GtkWidget *window1;

#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, “UTF-8”);
textdomain (GETTEXT_PACKAGE);
#endif

gtk_set_locale (); //ロケール設定
gtk_init (&argc, &argv); //gtkの初期化 引数の処理

add_pixmap_directory (PACKAGE_DATA_DIR “/” PACKAGE “/pixmaps”);

window1 = create_window1 (); //interface.cの関数を呼出す。
//=ウィンドや描画域、ウィジットを作成し、シグナルを設定する。

gtk_widget_show (window1); //ウィンドを可視状態にする。

gtk_main (); //gtkを動かす。メインイベントループ開始。

return 0;
}

interface.h ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
GtkWidget* create_window1 (void);

GtkWidget *drawingarea1;

interface.c ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>

#include “callbacks.h”
#include “interface.h”
#include “support.h”

#define GLADE_HOOKUP_OBJECT(component,widget,name) \
g_object_set_data_full (G_OBJECT (component), name, \
gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)

#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
g_object_set_data (G_OBJECT (component), name, widget)

GtkWidget*
create_window1 (void)
{
GtkWidget *window1;
GtkWidget *vbox1;
GtkWidget *menubar1;
GtkWidget *menuitem1;
GtkWidget *menu1;
GtkWidget *_______n_1;
GtkWidget *_______o_1;
GtkWidget *_______s_1;
GtkWidget *________________a_1;
GtkWidget *separatormenuitem1;
GtkWidget *_______q_1;
GtkWidget *menuitem2;
GtkWidget *menu2;
GtkWidget *_____________t_1;
GtkWidget *__________c_1;
GtkWidget *_____________p_1;
GtkWidget *_______d_1;
GtkWidget *menuitem3;
GtkWidget *menu3;
GtkWidget *menuitem4;
GtkWidget *menu4;
GtkWidget *_______a_1;
//GtkWidget *drawingarea1; //startボタンで描画するためグローバルにする(interface.hに移動)
GtkWidget *fixed1;
GtkWidget *entry1;
GtkWidget *entry2;
GtkWidget *label1;
GtkWidget *label2;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button1;
GtkAccelGroup *accel_group;

accel_group = gtk_accel_group_new ();

window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); //トップレベルウィンドを作成
gtk_window_set_title (GTK_WINDOW (window1), _(“window1”));

vbox1 = gtk_vbox_new (FALSE, 0);
gtk_widget_show (vbox1);
gtk_container_add (GTK_CONTAINER (window1), vbox1);

menubar1 = gtk_menu_bar_new ();
gtk_widget_show (menubar1);
gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);
gtk_widget_set_size_request (menubar1, 1000, 25);

menuitem1 = gtk_menu_item_new_with_mnemonic (_(“\343\203\225\343\202\241\343\202\244\343\203\253(_F)”));
gtk_widget_show (menuitem1);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem1);

menu1 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menu1);

_______n_1 = gtk_image_menu_item_new_from_stock (“gtk-new”, accel_group);
gtk_widget_show (_______n_1);
gtk_container_add (GTK_CONTAINER (menu1), _______n_1);

_______o_1 = gtk_image_menu_item_new_from_stock (“gtk-open”, accel_group);
gtk_widget_show (_______o_1);
gtk_container_add (GTK_CONTAINER (menu1), _______o_1);

_______s_1 = gtk_image_menu_item_new_from_stock (“gtk-save”, accel_group);
gtk_widget_show (_______s_1);
gtk_container_add (GTK_CONTAINER (menu1), _______s_1);

________________a_1 = gtk_image_menu_item_new_from_stock (“gtk-save-as”, accel_group);
gtk_widget_show (________________a_1);
gtk_container_add (GTK_CONTAINER (menu1), ________________a_1);

separatormenuitem1 = gtk_separator_menu_item_new ();
gtk_widget_show (separatormenuitem1);
gtk_container_add (GTK_CONTAINER (menu1), separatormenuitem1);
gtk_widget_set_sensitive (separatormenuitem1, FALSE);

_______q_1 = gtk_image_menu_item_new_from_stock (“gtk-quit”, accel_group);
gtk_widget_show (_______q_1);
gtk_container_add (GTK_CONTAINER (menu1), _______q_1);

menuitem2 = gtk_menu_item_new_with_mnemonic (_(“\347\267\250\351\233\206(_E)”));
gtk_widget_show (menuitem2);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem2);

menu2 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem2), menu2);

_____________t_1 = gtk_image_menu_item_new_from_stock (“gtk-cut”, accel_group);
gtk_widget_show (_____________t_1);
gtk_container_add (GTK_CONTAINER (menu2), _____________t_1);

__________c_1 = gtk_image_menu_item_new_from_stock (“gtk-copy”, accel_group);
gtk_widget_show (__________c_1);
gtk_container_add (GTK_CONTAINER (menu2), __________c_1);

_____________p_1 = gtk_image_menu_item_new_from_stock (“gtk-paste”, accel_group);
gtk_widget_show (_____________p_1);
gtk_container_add (GTK_CONTAINER (menu2), _____________p_1);

_______d_1 = gtk_image_menu_item_new_from_stock (“gtk-delete”, accel_group);
gtk_widget_show (_______d_1);
gtk_container_add (GTK_CONTAINER (menu2), _______d_1);

menuitem3 = gtk_menu_item_new_with_mnemonic (_(“\350\241\250\347\244\272(_V)”));
gtk_widget_show (menuitem3);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem3);

menu3 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menu3);

menuitem4 = gtk_menu_item_new_with_mnemonic (_(“\343\203\230\343\203\253\343\203\227(_H)”));
gtk_widget_show (menuitem4);
gtk_container_add (GTK_CONTAINER (menubar1), menuitem4);

menu4 = gtk_menu_new ();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menu4);

_______a_1 = gtk_menu_item_new_with_mnemonic (_(“\346\203\205\345\240\261(_A)”));
gtk_widget_show (_______a_1);
gtk_container_add (GTK_CONTAINER (menu4), _______a_1);

drawingarea1 = gtk_drawing_area_new ();
gtk_widget_show (drawingarea1);
gtk_box_pack_start (GTK_BOX (vbox1), drawingarea1, TRUE, TRUE, 0);
gtk_widget_set_size_request (drawingarea1, 1000, 600);
gtk_widget_set_events(drawingarea1, GDK_EXPOSURE_MASK); //expose設定(再描画)
gtk_container_add(GTK_CONTAINER(window1), drawingarea1);
gtk_widget_show(drawingarea1);


fixed1 = gtk_fixed_new ();
gtk_widget_show (fixed1);
gtk_box_pack_start (GTK_BOX (vbox1), fixed1, TRUE, TRUE, 0);
gtk_widget_set_size_request (fixed1, 1000, 37);

entry1 = gtk_entry_new ();
gtk_widget_show (entry1);
gtk_fixed_put (GTK_FIXED (fixed1), entry1, 176, 8);
gtk_widget_set_size_request (entry1, 120, 24);
gtk_entry_set_invisible_char (GTK_ENTRY (entry1), 8226);

entry2 = gtk_entry_new ();
gtk_widget_show (entry2);
gtk_fixed_put (GTK_FIXED (fixed1), entry2, 432, 8);
gtk_widget_set_size_request (entry2, 120, 24);
gtk_entry_set_invisible_char (GTK_ENTRY (entry2), 8226);


label1 = gtk_label_new (_(“\351\200\237\345\272\246”));
gtk_widget_show (label1);
gtk_fixed_put (GTK_FIXED (fixed1), label1, 112, 16);
gtk_widget_set_size_request (label1, 64, 16);

label2 = gtk_label_new (_(“\350\247\222\345\272\246”));
gtk_widget_show (label2);
gtk_fixed_put (GTK_FIXED (fixed1), label2, 368, 16);
gtk_widget_set_size_request (label2, 54, 16);

button2 = gtk_button_new_with_mnemonic (_(“stop”));
gtk_widget_show (button2);
gtk_fixed_put (GTK_FIXED (fixed1), button2, 752, 8);
gtk_widget_set_size_request (button2, 60, 29);

button3 = gtk_button_new_with_mnemonic (_(“\347\265\202\344\272\206”));
gtk_widget_show (button3);
gtk_fixed_put (GTK_FIXED (fixed1), button3, 840, 8);
gtk_widget_set_size_request (button3, 60, 29);

button1 = gtk_button_new_with_mnemonic (_(“start”));
gtk_widget_show (button1);
gtk_fixed_put (GTK_FIXED (fixed1), button1, 672, 8);
gtk_widget_set_size_request (button1, 60, 29);


g_signal_connect ((gpointer) _______n_1, “activate”,
G_CALLBACK (on________n_1_activate),
NULL);
g_signal_connect ((gpointer) _______o_1, “activate”,
G_CALLBACK (on________o_1_activate),
NULL);
g_signal_connect ((gpointer) _______s_1, “activate”,
G_CALLBACK (on________s_1_activate),
NULL);
g_signal_connect ((gpointer) ________________a_1, “activate”,
G_CALLBACK (on_________________a_1_activate),
NULL);
g_signal_connect ((gpointer) _______q_1, “activate”,
G_CALLBACK (on________q_1_activate),
NULL);
g_signal_connect ((gpointer) _____________t_1, “activate”,
G_CALLBACK (on______________t_1_activate),
NULL);
g_signal_connect ((gpointer) __________c_1, “activate”,
G_CALLBACK (on___________c_1_activate),
NULL);
g_signal_connect ((gpointer) _____________p_1, “activate”,
G_CALLBACK (on______________p_1_activate),
NULL);
g_signal_connect ((gpointer) _______d_1, “activate”,
G_CALLBACK (on________d_1_activate),
NULL);
g_signal_connect ((gpointer) _______a_1, “activate”,
G_CALLBACK (on________a_1_activate),
NULL);
g_signal_connect ((gpointer) entry1, “changed”,
G_CALLBACK (on_entry1_changed),
NULL);
g_signal_connect ((gpointer) entry2, “changed”,
G_CALLBACK (on_entry2_changed),
NULL);
g_signal_connect ((gpointer) button2, “button_press_event”,
G_CALLBACK (on_button2_button_press_event),
NULL);
g_signal_connect ((gpointer) button3, “button_press_event”,
G_CALLBACK (on_button3_button_press_event),
NULL);
g_signal_connect ((gpointer) button1, “button_press_event”,
G_CALLBACK (on_button1_button_press_event),
NULL);
g_signal_connect (G_OBJECT(drawingarea1), “expose_event”,
G_CALLBACK(my_expose_event), NULL)
;

/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, “window1”);
GLADE_HOOKUP_OBJECT (window1, vbox1, “vbox1”);
GLADE_HOOKUP_OBJECT (window1, menubar1, “menubar1”);
GLADE_HOOKUP_OBJECT (window1, menuitem1, “menuitem1”);
GLADE_HOOKUP_OBJECT (window1, menu1, “menu1”);
GLADE_HOOKUP_OBJECT (window1, _______n_1, “_______n_1”);
GLADE_HOOKUP_OBJECT (window1, _______o_1, “_______o_1”);
GLADE_HOOKUP_OBJECT (window1, _______s_1, “_______s_1”);
GLADE_HOOKUP_OBJECT (window1, ________________a_1, “________________a_1”);
GLADE_HOOKUP_OBJECT (window1, separatormenuitem1, “separatormenuitem1”);
GLADE_HOOKUP_OBJECT (window1, _______q_1, “_______q_1”);
GLADE_HOOKUP_OBJECT (window1, menuitem2, “menuitem2”);
GLADE_HOOKUP_OBJECT (window1, menu2, “menu2”);
GLADE_HOOKUP_OBJECT (window1, _____________t_1, “_____________t_1”);
GLADE_HOOKUP_OBJECT (window1, __________c_1, “__________c_1”);
GLADE_HOOKUP_OBJECT (window1, _____________p_1, “_____________p_1”);
GLADE_HOOKUP_OBJECT (window1, _______d_1, “_______d_1”);
GLADE_HOOKUP_OBJECT (window1, menuitem3, “menuitem3”);
GLADE_HOOKUP_OBJECT (window1, menu3, “menu3”);
GLADE_HOOKUP_OBJECT (window1, menuitem4, “menuitem4”);
GLADE_HOOKUP_OBJECT (window1, menu4, “menu4”);
GLADE_HOOKUP_OBJECT (window1, _______a_1, “_______a_1”);
GLADE_HOOKUP_OBJECT (window1, drawingarea1, “drawingarea1”);
GLADE_HOOKUP_OBJECT (window1, fixed1, “fixed1”);
GLADE_HOOKUP_OBJECT (window1, entry1, “entry1”);
GLADE_HOOKUP_OBJECT (window1, entry2, “entry2”);
GLADE_HOOKUP_OBJECT (window1, label1, “label1”);
GLADE_HOOKUP_OBJECT (window1, label2, “label2”);
GLADE_HOOKUP_OBJECT (window1, button2, “button2”);
GLADE_HOOKUP_OBJECT (window1, button3, “button3”);
GLADE_HOOKUP_OBJECT (window1, button1, “button1”);

gtk_window_add_accel_group (GTK_WINDOW (window1), accel_group);

return window1;
}

callbacks.h ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
#include <gtk/gtk.h>

void
on________n_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on________o_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on________s_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on_________________a_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on________q_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on______________t_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on___________c_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on______________p_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on________d_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on________a_1_activate (GtkMenuItem *menuitem,
gpointer user_data);

void
on_entry1_changed (GtkEditable *editable,
gpointer user_data);

void
on_entry2_changed (GtkEditable *editable,
gpointer user_data);

gboolean
on_button1_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);

gboolean
on_button2_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);

gboolean
on_button3_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data);

gboolean
on_drawingarea1_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data);

gint
my_expose_event (GtkWidget *widget, GdkEventExpose *event,
gpointer user_data);

void
Repaint1(GtkWidget *widget);

void
Repaint2(GtkWidget *widget);


callbacks.c ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <gtk/gtk.h>

#include “callbacks.h”
#include “interface.h”
#include “support.h”

#define FONT_SET01 "-misc-sazanami mincho-medium-r-normal--32-0-0-0-c-0-jisx0208.1983-0, lucidasanstypewriter-24"
#define FONT_SET02 "-misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0, lucidasanstypewriter-bold-18"

gint my_timer;
gchar *ch1 = “\343\203\206\343\202\271\343\203\210\357\274\221”;
gchar *ch2 = “\343\203\206\343\202\271\343\203\210\357\274\222”;
gint count1;
GdkPixmap *px1; //描画用ピススマップ


void
on________n_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on________o_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on________s_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on_________________a_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on________q_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on______________t_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on___________c_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on______________p_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on________d_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on________a_1_activate (GtkMenuItem *menuitem,
gpointer user_data)
{

}

void
on_entry1_changed (GtkEditable *editable,
gpointer user_data)
{
ch1 = gtk_entry_get_text(GTK_ENTRY(editable)); //テキストエントリから文字列の取得
}

void
on_entry2_changed (GtkEditable *editable,
gpointer user_data)
{
ch2 = gtk_entry_get_text(GTK_ENTRY(editable));
}

gboolean
on_button1_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
my_timer = gtk_timeout_add(50, (GtkFunction)Repaint2, drawingarea1); //アニメ開始
return FALSE;
}

gboolean
on_button2_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
gtk_timeout_remove(my_timer); //アニメ一時停止
return FALSE;
}

gboolean
on_button3_button_press_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
gtk_main_quit (); //終了
return FALSE;
}

gint
my_expose_event(GtkWidget *widget, GdkEventExpose *event,
gpointer user_data)
{
Repaint1(widget); //基本描画
return FALSE;
}

////////////////////////////////////////////////////////////////////////////////////////////////

void
Repaint1(GtkWidget *widget) //基本描画
{
GdkGC *gc1 = gdk_gc_new(widget->window);
px1 = gdk_pixmap_new(widget->window, widget->allocation.width, widget->allocation.height, -1);
GdkFont *font1 = gdk_fontset_load(FONT_SET01);
GdkFont *font2 = gdk_fontset_load(FONT_SET02);
GdkColor red = {0, 0xffff, 0x0000, 0x0000};
GdkColor green = {0, 0x0000, 0xffff, 0x0000};

gdk_draw_rectangle(px1, widget->style->white_gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); //白で塗りつぶす

gdk_colormap_alloc_color(gdk_colormap_get_system(), &green, TRUE, TRUE);
gdk_gc_set_foreground(gc1, &green);
gdk_draw_string(px1, font1, gc1, 50, 50, ch1); //文字列
gdk_draw_line(px1, gc1, 100, 100, 300, 300); //線
gdk_draw_arc(px1, gc1, TRUE, 300, 300, 100, 100, 0, 20000); //円・楕円 TRUEは塗りつぶし 0, 23040で360度(64=1度)

gdk_colormap_alloc_color(gdk_colormap_get_system(), &red, TRUE, TRUE);
gdk_gc_set_foreground(gc1, &red);
gdk_draw_string(px1, font2, gc1, 100, 100, ch2); //文字列
gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
px1, 0, 0, 0, 0, widget->allocation.width, widget->allocation.height); //ピクスマップを貼り付ける
}

void
Repaint2(GtkWidget *widget) //アニメ(上と同じピクスマップに描画)
{
GdkGC *gc1 = gdk_gc_new(widget->window);
GdkColor red = {0, 0xffff, 0x0000, 0x0000};
GdkFont *font1 = gdk_fontset_load(FONT_SET02);

gdk_colormap_alloc_color(gdk_colormap_get_system(), &red, TRUE, TRUE);
gdk_gc_set_foreground(gc1, &red);

gdk_draw_string(px1, font1, gc1, 200, 200, ch1);
gdk_draw_string(px1, font1, gc1, 300, 300, ch2);
gdk_draw_point(px1, gc1, 300, 300 + count1); //点

gdk_draw_pixmap(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
px1, 0, 0, 0, 0, widget->allocation.width, widget->allocation.height);

gtk_widget_show_now (widget);
count1++;
}



実行例



TOPへ  Cプログラミング目次へ