วันเสาร์ที่ 11 เมษายน พ.ศ. 2563

เริ่มต้นใช้ gtk ด้วยภาษา C ตอนที่ 1

พูดถึงภาษา C เชื่อว่าหลายคนในบ้านเราร้องยี้กันมาก เพราะคิดว่ามันยาก เอาเข้าจริง ภาษา C ไม่ได้ยากแต่การเอาภาษา C มาใช้งานเพื่อให้เป็นระบบนั่นแหละยาก กล่าวอย่างนี้ไม่ใช่การเล่นคำอะไรทั้งสิ้น หากแต่เทียบง่ายๆ ภาษา C ก็เหมือนภาษาอังกฤษ ที่มีหลักการมีไวยากรณ์ที่เป็นพื้นฐาน เราสามารถเลือกเรียนรู้ได้ตามที่ต้องการ แต่เมื่อต้องการนำไปใช้งานในระดับกว้างแล้วภาษา C กลับถูกเลือกใช้น้อยกว่าภาษาอื่นๆ อย่างเช่น C# เป็นต้น

แม้กระทั่งการเขียนโปรแกรมสำหรับ Arduino ก็นิยมใช้ C++ เช่นกัน แต่สำหรับบนลีนุกซ์แล้วภาษาที่ผู้คิดค้นเขาเลือกใช้ ภาษา C จึงเป็นเรื่องที่น่าสนใจเป็นอย่างยิ่งในการเรียนรู้ ดังนั้นผู้เขียนจึงได้พยายามค้นหาข้อมูลเพื่อเรียนรู้ว่าจะเขียนโปรแกรมบน Linux ได้อย่างไร แต่เดิมก็เรียบๆ เคียงๆ กับ C++ และ Python ก็มองผ่านภาษา C ไปอีก

จนกระทั่งล่าสุดช่วงที่หยุดอยู่กับบ้านเพราะภัยไวรัสโควิด-19 ก็มีเวลาว่างมากเสียจนไม่รู้จะทำอะไรก่อนหลังดี เพราะไม่มีสมาธิ และรู้สึกสับสนว้าวุ่นเป็นอย่างมาก สุดท้ายก็กลับมาที่ภาษาซี โดยคิดว่าจะเขียนโปรแกรมเล่นๆ แก้เซ็งสักหน่อย พลันก็คิดขึ้นได้ว่า ทำไมเราไม่ลองเขียน GUI ด้วยภาษา C ซะเลยล่ะ


เหตุผลสำคัญหลังจากที่ติดตั้ง Raspberry Pi เรียบร้อยแล้วก็พยายามจะลง Qt แต่ก็ติดปัญหาเรื่องความเร็ว และ Qt กลับทำงานอืดอาดมาก พอเปลี่ยนไปหยิบเอา NanoPi M1 มาลงเพื่อใช้งานดูก็พบว่าทรัพยากรมันจำกัดจำเขี่ยมาก บังเอิญเหลือบตาไปเห็นโปรแกรม Geany เลยลองเปิดดูพบว่าเป็น Editor สำหรับภาษา C ได้เป็นอย่างดีก็เลยลองเขียนเพื่อติดต่อกับ gtk เวอร์ชัน 2.0 ดูก็ใช้งานได้ดีเลยตั้งใจว่าช่วงหยุดงานนี้น่าจะเรียนรู้ภาษา C และ GUI ด้วย gtk ได้ให้จนได้


GTK ชื่อเรียกของ GIMP Toolkit ซึ่งก็เป็นเครื่องมือหนึ่งของโปรแกรม GIMP ซึ่งเป็นโปรแกรมจัดการรูปภาพที่นิยมในฝั่ง Linux ถึงแม้จะสู้ Adobe Photoshop ไม่ได้ แต่ก็เป็นโปรแกรมที่มีความสามารถไม่น้อย ใช้งานง่ายไม่เปลืองทรัพยากรเครื่องมาก

ส่วนรายละเอียดอื่นๆ เดี๋ยวขอศึกษาก่อนว่ามีรายละเอียดอย่างไร ถึงแม้ว่าขณะนี้จะเป็น gtk 3.0 แล้ว แต่ก็เริ่มจาก gtk 2.0 ก่อนก็แล้วกันนอกนั้นค่อยว่ากันอีกที

ปกติเรารู้กันว่าภาษา C ไม่มีหลักการทำงานแบบ OOP ก็จริง แต่การเขียนโปรแกรมด้วย gtk ก็มีหลักการแบบ OOP เหมือนกัน เรื่องนี้ก็กำลังศึกษาว่าเป็นอย่างไร และขอติดไว้ก่อนว่าแท้จริงเป็นอย่างไร

การติดตั้ง
sudo apt-get install libgtk2.0-dev

การ Compile และ Build
gcc `pkg-config --cflags --libs gtk+-2.0` gtktest.c -o gtktest

คอนฟิกโปรแกรม Geany

  1. เลือก Build -> Set Build Commands
  2. เพิ่ม `pkg-config --cflags --libs gtk+-2.0`  ในช่อง Compile และ Build



ลองเขียนโปรแกรมแรก


#include <gtk/gtk.h>

int main(int argc, char *argv[]){
    
    gtk_init(&argc, &argv);

    GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(win);
    gtk_main();
   
    return 0;
}

จากนั้นก็คอมไพล์ด้วยคำสั่ง

gcc `pkg-config --cflags --libs gtk+-2.0` gtktest.c -o gtktest
 หรือกดปุ่ม F9 และ F5 ในโปรแกรม Geany เพื่อสร้างไฟล์และสั่งรันโปรแกรมก็จะได้หน้าจอดังนี้



นี่เป็นโปรแกรมเริ่มแรกสำหรับการใช้งาน gtk+-2.0 ในแบบง่ายๆ เดี๋ยวเราค่อยมาว่ากันต่อว่าแต่ละส่วนคืออะไร และจะทำงานให้ครบถ้วนได้อย่างไร คอยติดตามนะครับ... สวัสดีครับ

เรียนรู้เพิ่มเติม
https://www.cc.gatech.edu/data_files/public/doc/gtk/tutorial/gtk_tut.html#toc3
http://zetcode.com/gui/gtk2/
http://epic-alfa.kavli.tudelft.nl/share/gtk-doc/html/gtk2/

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...