01. โปรแกรมแรกกับ Gtk+-2.0
GTK ชื่อเรียกของ GIMP Toolkit ซึ่งก็เป็นเครื่องมือหนึ่งของโปรแกรม GIMP ซึ่งเป็นโปรแกรมจัดการรูปภาพที่นิยมในฝั่ง Linux ถึงแม้จะสู้ Adobe Photoshop ไม่ได้ แต่ก็เป็นโปรแกรมที่มีความสามารถไม่น้อย ใช้งานง่ายไม่เปลืองทรัพยากรเครื่องมาก
ส่วนรายละเอียดอื่นๆ เดี๋ยวขอศึกษาก่อนว่ามีรายละเอียดอย่างไร ถึงแม้ว่าขณะนี้จะเป็น gtk 3.0 แล้ว แต่ก็เริ่มจาก gtk 2.0 ก่อนก็แล้วกันนอกนั้นค่อยว่ากันอีกที
ปกติเรารู้กันว่าภาษา C ไม่มีหลักการทำงานแบบ OOP ก็จริง แต่การเขียนโปรแกรมด้วย gtk ก็มีหลักการแบบ OOP เหมือนกัน เรื่องนี้หลายคนอาจจะงง อันที่จริง OOP เป็นหลักการเชิงวัตถุ แต่ภาษา C ก็ไม่ได้มีหลักการนี้ตั้งแต่ต้น แต่หากมองแค่ Object แล้วภาษา C มีมาตั้งแต่ต้นแล้วเช่น struct และ Gtk ก็มองสิ่งต่างๆ เป็น Object เช่นกัน เรื่องนี้ค่อยว่ากันทีหลัง
และการเขียนโปรแกรมในบทความต่อไปนี้จะอ้างอิงกับ Linux เท่านั้น ส่วนบนวินโดว์จะเพิ่มในส่วนของ CodeBlocks ภายหลัง
การติดตั้ง
ก่อนจะเริ่มเขียนโปรแกรมต้องติดตั้งไลบรารี Gtk+ เสียก่อน ในที่นี้ใช้ gtk2.0 เพราะต้องการเริ่มต้นเรียนรู้ที่เวอร์ชันนี้ก่อนพอไปเวอร์ชัน 3 จะได้เข้าใจที่มาที่ไปมากขึ้น การติดตั้งใน Ubuntu หรือ Lubuntu ก็ใช้คำสั่ง apt-get install ดังนี้
sudo apt-get install libgtk2.0-dev
หลังจากติดตั้งแล้วให้ทดสอบไลบรารี่ดังนี้
pkg-config --cflags --libsgtk+2.0
จะได้ผลดังนี้
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/arm-linux-gnueabihf/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/freetype2 -lgtk-x11–2.0 -lgdk-x11–2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2–1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype
ลองเขียนโปรแกรมแรก
โปรแกรมแรกนี้เขียนแบบง่ายๆ ขั้นแรก include <gtk/gtk.h> ก่อนเพื่อเรียกใช้ฟังค์ชันของ Gtk+
#include <gtk/gtk.h>
int main(int argc, char *argv[]){
/*เริ่มต้นด้วยฟังค์ชัน gtk_ini*/
gtk_init(&argc, &argc);
/*สร้าง Widget ชื่อ win ด้วยคำสั่ง gtk_window_new*/
GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/*แสดง Widget ชื่อ win*/
gtk_widget_show(win);
/*รันระบบด้วย gtk_main()*/
gtk_main();
return 0;
}
การ Compile และ Build
เมื่อติดตั้งเสร็จแล้ว ต่อไปก็ลองเขียนโปรแกรม และเวลาคอมไพล์ให้เพิ่ม library ที่เห็นข้างบนเข้าไปด้วย วิธีการก็ใช้เครื่องหมาย ` ` ใส่ในคำสั่ง pkg-config ตามตัวอย่างนี้
gcc `pkg-config --cflag --libsgtk+-2.0` gtktest.c -o gtktest
คอนฟิกโปรแกรม Geany
- เลือก Build -> Set Build Commands
- เพิ่ม `pkg-config — cflags — libs gtk+-2.0` ในช่อง Compile และ Build แล้วคลิกปุ่ม OK เพื่อบันทึก
การคอมไพล์บน Geany ให้กดปุ่ม F9 และ F5 เพื่อสั่งรันโปรแกรมก็จะได้หน้าจอดังนี้
ที่หน้าจอยังไ่ม่มีอะไรเกิดขึ้น เพราะในโค้ดข้างต้นเราไม่ได้สั่งอะไรเพิ่มเติม สร้างแค่ Widget เดียวชื่อ win ซึ่งเป็น GtkWidget *window และหากปิดหน้าจอโปรแกรมตัวอย่างนี้โปรแกรมก็ไม่จบกระบวนการ ต้องกดปิดหน้า Terminal อีกครั้งไม่เช่นนั้นจะกดรันอีกไม่ได้
ตัวอย่างแรกก็จบไปแล้ว บทความหน้าจะมาดูการเพิ่ม Widget อื่นๆ และการเพิ่ม signal ที่เปรียบเหมือนสัญญานสั่งให้ระบบทำงานอื่นๆ นะครับ… สวัสดี