基本の関数を読む(GTKで遊ぶ第6回)

アメブロ時代のこの連載第2回において入門用ソースファイル(gtk3test.c)をダウンロードしてきました。

『GTKで作るアプリ最初の一歩(GTKで遊ぶ第2回)』
WindowsのVisual Studio Community 2019 でGTKのビルドができました。せっかくなので動かしてみたいと思います。 gtk本家の…

このソースコードの中で使われているGTKの関数をリストアップしてみます。

  1. gtk_init()
  2. gtk_window_new()
  3. gtk_window_set_title()
  4. gtk_box_new()
  5. gtk_label_new()
  6. gtk_button_new_with_label()
  7. gtk_box_pack_start()
  8. gtk_container_add()
  9. gtk_widget_show_all()
  10. gtk_main()
  11. gtk_main_quit()

基本的には英語の意味から類推すればいいと思います。なので

  1. gtk_init()はアプリの初期化でしょう。initはinitialize(初期化)の略。
  2. gtk_window_new()はきっと新しいウィンドウを作るんでしょう。
  3. gtk_window_set_title()はウィンドウにタイトルを表示。
  4. gtk_box_new()のボックスってなに?
  5. gtk_label_new()は新規のラベルを作ってる。ラベルっていうのはきっと文字(文字列)が書かれるところでしょう。
  6. gtk_button_new_with_label()ボタンにお好みの文字列を表示できるんだろうなぁ。
  7. gtk_box_pack_start()ボックスっていうのを理解しないとこの関数もよくわかりませんね。
  8. gtk_container_add()コンテナっていうのは複数の部品をまとめて保持するところでしょう。それをひとつウィンドウに追加しているんでしょうね。
  9. gtk_widget_show_all()ウィジェットっていうのはGUIの部品のことでしょう。全部表示せよと。
  10. gtk_main()きっとこの関数を呼び出したらメインループが発動して、ユーザーのアクション待ちになるのでしょう。
  11. gtk_main_quit()ウィンドウが閉じられる時とかアプリが終了する時とかにこれを呼び出してメモリを掃除するのでしょう。

ここで登場する英単語は、プログラミングを学ぶとしょっちゅう出会う頻出英単語です。
プログラミングを学ぶなら絶対に知っておかなきゃダメ。

だいたい関数の名前を読むだけで理解できますね。

プログラムはたいていの場合、アプリが起動するときに初期化用の関数が呼ばれて、アプリを終了する時は終了用の関数が呼ばれます。GTKではgtk_init()とgtk_main_quit()ですね。

よくわからないところを調べるには前回たどり着いたGTKの公式ドキュメントをまずあたりましょう。

上でみたように今回のプログラムで分からなかったのはBoxという用語。

そうすると下記のGtkBoxのページが参考になります。

Gtk-3.0
Reference for Gtk-3.0

GtkBox — A container for packing widgets in a single row or column(GtkBox — 1つの行か列に詰めこまれたウィジェットのためのコンテナです。)

どうやらBoxというのもコンテナの一種のようですね。

そんな風にしてドキュメント片手にプログラムの意味を理解していきます。

Object Hierarchyのところを見ると、GtkContainerとGtkBoxは親子関係にあるようだとわかります。

Object Hierarchy

こんな風にしてだいたいの意味を把握しながら、ではここの引数をこう変えればこうなるはずだ!とか考えて、実験を繰り返すといいです。

思ってた通りになることもあれば、予想外のことが起きることもあります。予想が外れた時、改めて資料の詳細を読み込み、理解を深めていきましょう。

さて、ここまででようやくGTKアプリ開発のスタートを切れたことにします。
最初の一歩はひとまず踏み出せたぞと。

落ち着いて眺めてみるとこれまで見てきたこのソースコード、コメントがフランス語でした。

フランス語はあまりなじみがなくて読むのが大変なので、ここまで来たらちょっといったん落ち着いて、次回は改めてGTK本家サイトにあるサンプルコードを持ってきて動かしてみたいなと思います。

タイトルとURLをコピーしました