「GNOMEフレームワーク」の版間の差分

削除された内容 追加された内容
最近のGTKでは、図形描画ライブラリにcairoというフリーの画像描画ライブラリを採用している。特に追加インストールすることなく、cairoの図形描画命令が使用できる。 cairo自体は、GTKとは別のアプリなので、詳細はcairoの入門書を参照のこと。
source lang タグ を syntaxhighlight lang タグに置き換え。コード例として、ウィンドウ表示だけの最も簡単なプログラムを追加。
114 行
 
==== コーディング ====
その後、テキストエディタで、次のようにコードを書いてください。下記コードは、ウィンドウだけのプログラムです
 
<sourcesyntaxhighlight lang="c">
#include <gtk/gtk.h>
int main (int argc, char *argv[])
{
GtkWidget *window; // ウィジェットを格納するための変数を宣言
gtk_init (&argc, &argv); // GTKの初期化
 
/* ウィンドウを作成 */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "ウィンドウ");
 
/* 表示することを設定 */
gtk_widget_show_all (window);
 
/* メインループ */
gtk_main ();
return 0;
}
</syntaxhighlight>
 
GTKでは、C言語など既存のプログラミング言語の上に、GTKをインクルードする仕組みを用いて、GTKは使用されます。
 
なので、上記のコードを書いたら、C言語として保存してください。つまり、拡張子が「.c」になります。
 
例えば、上記のコードを、テスト用のファイルという意味で「tesuto.c」で保存したとしましょう。
 
上記のコードを実行できるようにするには、コンパイルする必要があります。
 
これをコンパイルするため、オブジェクトファル名がたとえば「obuje」なら、
gcc tesuto.c -o obuje `pkg-config --cflags --libs gtk+-3.0`
のようにします。「`pkg-config --cflags --libs gtk+-3.0`」などの設定をつける必要があります。この設定をつけないと、コンパイルエラーになってしまい、コマンド端末から「No such file or directory」(そのようなファイルまたはディレクトリはありません)などとエラー報告されてしまいます。
 
 
コンパイルできたら、あとは実行するだけです。 gcc tesuto.c -o obuje を使った場合、ホームフォルダなど出力先として設定されているフォルダに実行ファイル「obuje」が作成されていますので、それをダブルクリックするだけで実行できます。
 
実行すると、作成したウィンドウが表示されます。
 
 
=== コード例 ===
<syntaxhighlight lang="c">
#include <gtk/gtk.h>
int main (int argc, char **argv){
143 ⟶ 183行目:
return 0;
}
</syntaxhighlight>
</source>
 
 
:[[画像:gnome_fixed.png]]
 
GTKでは、C言語など既存のプログラミング言語の上に、GTKをインクルードする仕組みを用いて、GTKは使用されます。
 
なので、上記のコードを書いたら、C言語として保存してください。つまり、拡張子が「.c」になります。
 
例えば、上記のコードを、テスト用のファイルという意味で「tesuto.c」で保存したとしましょう。
 
上記のコードを実行できるようにするには、コンパイルする必要があります。
 
これをコンパイルするため、オブジェクトファル名がたとえば「obuje」なら、
gcc tesuto.c -o obuje `pkg-config --cflags --libs gtk+-3.0`
のようにします。「`pkg-config --cflags --libs gtk+-3.0`」などの設定をつける必要があります。この設定をつけないと、コンパイルエラーになってしまい、コマンド端末から「No such file or directory」(そのようなファイルまたはディレクトリはありません)などとエラー報告されてしまいます。
 
 
コンパイルできたら、あとは実行するだけです。 gcc tesuto.c -o obuje を使った場合、ホームフォルダなど出力先として設定されているフォルダに実行ファイル「obuje」が作成されていますので、それをダブルクリックするだけで実行できます。
 
実行すると、作成したウィンドウが表示されます。
 
=== 解説 ===
196 ⟶ 221行目:
メニューバーのクラスはソースコード内では./gnome-panel/panel-menu-bar.hで定義されています。この中のPanelMenuBar構造体を確認すると分かる通り、このクラスはGtkMenuBarを継承しています。そのため、このクラスは基本的にGtkMenuBarと同じ動作をします。GtkMenuBarを使ったサンプルとして次のようなメニューの例があげられます。
 
<sourcesyntaxhighlight lang="c">
int main (int argc, char **argv){
gtk_init(&argc, &argv);
227 ⟶ 252行目:
return 0;
}
</syntaxhighlight>
</source>
 
:[[画像:gnome_menu.png|GtkMenuを使った例。この画像はできたGUIアプリケーションを見ながら、手で描いたものである。]]
240 ⟶ 265行目:
GtkMenuのポップアップの例として、次のサンプルをあげます。
 
<sourcesyntaxhighlight lang="c">
int main (int argc, char **argv){
gtk_init(&argc, &argv);
260 ⟶ 285行目:
return 0;
}
</syntaxhighlight>
</source>
 
:[[画像:gnome_panel_gtk_menu_popup_no_window.svg]]
276 ⟶ 301行目:
 
 
<sourcesyntaxhighlight lang="c">
GtkWindow *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
282 ⟶ 307行目:
g_signal_connect(window, "button_press_event", G_CALLBACK(window_button_cb), menu);
gtk_widget_show(window);
</syntaxhighlight>
</source>
 
ただし、menuは上で作成したGtkMenuと同一です。ここで、window_button_cbは次のように与えます。
 
 
<sourcesyntaxhighlight lang="c">
void window_button_cb(GtkWidget *window, GdkEventButton *button, GtkWidget *menu){
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0,
gtk_get_current_event_time() );
}
</syntaxhighlight>
</source>
 
:[[画像:gnome_panel_gtk_menu_popup_with_window.svg]]
433 ⟶ 458行目:
ここで、GtkDialogはGtkWindowを継承したクラスで、GtkWindowに"OK", "キャンセル"などの各種ボタンを与えるクラスです。一般的なGtkDialogの例として、次のようなサンプルがあげられます。
 
<sourcesyntaxhighlight lang="c">
#include <gtk/gtk.h>
int main (int argc, char **argv){
467 ⟶ 492行目:
return 0;
}
</syntaxhighlight>
</source>
 
:[[画像:gnome_panel_gtk_dialog.png|200px]]