Jan 14
Share

สวัสดีครับ ออกจะแปลกไปสักเล็กน้อยนะครับ สำหรับตอนนี้ เพราะยังคงเป็นบทความเล่ารำลึกถึงความหลังอยู่อีกนั่นแหละ

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

อีกจุดหนึ่ง ที่อาจจะพอถูไถไปได้บ้าง นั่นก็เพราะว่า ผมเป็นโปรแกรมเมอร์พันธุ์ทางครับ ไม่ใช่พันธุ์แท้ ของที่ศึกษามาก็มาจากการงมๆหาด้วยตัวเองเป็นหลัก ไม่สังกัดองค์กรที่ไหน เลยไม่คิดว่าจะต้องมีอะไรกั๊กกันล่ะครับ 555+  มาเข้าเรื่องกันเลยจะดีกว่า

นับ​จาก​วันที่ผมเริ่มต้นรู้จัก​กับ​ ​การเขียนโปรแกรม​ด้วย​ ​ภาษา​ C ​บน​ windows ​ตอน​นั้น​ ​ก็​อยู่​ใน​ช่วง​ ​ประมาณปี​ 1998 (ผมยึดตาม​ windows 98 ​น่ะ) ​จนมา​ถึง​ปัจจุบันที่มี​ Dot net ​คือ​ ​ปี​ 2006 ​แล้ว​ ​ก็ถือว่า​เกือบ​จะ​ 10 ​ปี​ได้​แล้ว​… (ล่าสุด คือ 2009-20010 แล้วนะ)

แต่สำหรับผมแล้ว ก็ยังคงเป็น​คนที่​อยู่​นอกวงการโปรแกรมเมอร์อยู่​ดี​ ​คงเป็นเพราะ​ว่า​ ​ไม่​ได้​ใช้​งานมันไปในทางลึกๆมากนัก แค่พอใช้งานได้ ภาษาโปรแกรมที่ได้ใช้ทำงานจริงๆ จะเป็น​ VB (VB ​ที่ว่านี้คือ​ Visual Basic นั่นเอง) ​แต่ว่า​ VB ​เอง​ ​ก็​ไม่​ใช่​ทางที่ถูกต้องของผม​ ​แต่ที่​ต้อง​ใช้​เพราะ​มันสร้างงาน​ได้​ไว​ ​ใน​ระหว่างนั้นนั่นแหละ​ ​ก็มีการเกิดขึ้นของภาษา​ใหม่​และ​Platform ​ใหม่​ ​คือ​ dot net ​ขึ้นมา​ ​พร้อม​กับ​ C# ​ซึ่ง​ทำ​ให้​ผมงง​ ​และ​สับสนว่า​ ​จะ​เอา​ไงดีหว่า​ ​เพราะ​ว่า​ ​เมื่อมอง​จาก​พื้นฐานของตัวเอง​แล้ว​ ​เป็น​ไป​ได้​ยากที่​จะ​เข้า​กับ​ภาษา​ใหม่​พวก​นั้น​ ​แค่ของเดิมที่มีก็ค่อนข้าง​จะ​โคตรยาก​ถึง​ยากสุดๆแล้ว​ ​ต้อง​ใช้​ระยะ​เวลามา​เข้า​ใจของใหม่อีก​ ​ไม่​ทันกินแน่​ ​ทำ​ไงดี

ก่อนที่​จะ​บอกว่า​ ​ผมตัดสินใจไป​ยัง​ไง​ ​ขอเล่า​ถึง​ ​พื้นฐาน​ใน​การพยายามเขียนโปรแกรม​ด้วย​ภาษา​ C ​กัน​ก่อน​ C For Windows ที่ว่านี้​ ​คือการ​ใช้​งาน​กับ​ WIN API ​ซึ่ง​เป็น​มาตรฐานที่ถูกกำ​หนดมา​โดย​ Windows ​นี่​แหละ​ ​ที่ผ่านมา ​ผมเอง​ยัง​ไม่​เคย​ใช้​ Win API ​ทำ​โปรแกรมอะ​ไรที่มันดีๆ​เป็น​ชิ้น​เป็น​อันเลย​ ​ใน​ขณะที่​ VB ​นั้น​ ​ทำ​ไป​แล้ว​ 2 ​โปรแกรม​ ​โดย​เฉพาะ​โปรแกรมที่สอง​ คือ โปรแกรมแสดงบัญชี ​เขียน​ไว้​ดีมากๆ​ ​จนอดคิด​ไม่​ได้​ว่า​ ​แล้ว​ WIN API ​จะ​ทำ​ได้​ดีขนาด​นั้น​ไหม​ ​เอาล่ะ​ ​พูดออกนอกเรื่องไปเยอะ​แล้ว​ ​กลับมา​ใหม่​ ​มาทบทวน​กัน​ใน​ส่วน​ของพื้นฐาน​ ​ซึ่ง​ผมเอง​เป็น​ลักษณะดังนี้

เส้นทางการหัดเขียนโปรแกรม

มีอยู่ช่วงหนึ่ง ผมกำลังหาวิธีการทำระบบ Graphic กันอยู่​แล้ว ​ก็​เจอ​เข้า​กับคำสั่งของ​ DirectX ​และ​ OpenGL ​เข้า ซึ่ง​สามารถใช้​งาน​ได้​ใกล้​เคียง​กัน​ ​และ​ ​เป็น​เครื่องมือติดต่อ​กับ​ระบบกราฟฟิก​ 2/3 ​มิติ​ใน​คอมพิวเตอร์​ทั้ง​คู่​ ​ปัญหามัน​อยู่​ที่ว่า​ ​มันทำ​งาน​ได้​เร็ว​เมื่อ​เรียกใช้จาก​ Win API ​จะ​ใช้​ตัว​อื่น​ก็ได้​ ​เช่น​ MFC ​เพียงแต่​เรียกจะ​ใช้​ได้​ช้ากว่า​ (จาก Tutorial ​ไม่​แนะนำ​ให้​ใช้​ว่างั้น)  ดังนั้น ก็เลยต้องย้อนกลับมางม Win API กันต่อ ​นอก​จาก​นั้น​ ​ผม​ยัง​เจอปัญหา​ใน​การเขียน​ ​อ่าน​ ​ไฟล์ข้อมูลในระบบ Windows อีก​ด้วย​ ​ทำ​ให้​ผม​ต้อง​กระ​โดดไปมาระหว่าง​ Pascal,MFC,C++ Builder ​โดย​เทียบเคียง​กับ​ VB ​(เพราะ VB ทำได้ครับ เฮ้อ -*-” )และ​ไม่​ได้​แตะ​ C Win API ​เลย​ ​เพราะ​ว่า​ Code ​ยาว

ยิ่งไปกว่า​ นั้น​ ​ผม​ยัง​พบปัญหาของ​การเขียนโปรแกรมเพื่อติดต่อ​กับ​ control ​มาตรฐานของ​ Windows ​บางตัว ในการ​ใช้​งาน​ เมื่อเปลี่ยนการใช้เครื่องมือและ platform ที่เขียน ​ตัวอย่างเช่น​ Control ​ที่ชื่อว่า​ ListView ที่ใน ​VB ​ใช้​งาน​ได้​ดี​ มีเอกสารช่วยเหลือมากมาย ต่างกับ​โปรแกรมของ Delphi/C++ Builder ​ที่ไม่​มีข้อมูลของ​ control ตัวนี้ ทั้ง​คู่​ ​และถ้าใช้ MFC ​ก็พอ​ใช้​ได้​เช่นกัน ​แต่​เมื่อ​กลับมาใช้​ C Win API ​พบว่า หาข้อมูล​ได้​น้อย​ ​ถึง​ ​น้อยมาก​ ​งง​ ​ไปเลยล่ะ​ (ณ​ ​เวลา​นั้น​ Google ​เพิ่งเกิด​ใหม่ๆ​ ​ยัง​ไม่​ใช้​กัน​แพร่หลายเหมือนทุกวันนี้) ​สำ​หรับ​ Control ​ที่​ MFC ​ใช้​ ​จะมีวิธี​การเรียก​ใช้​งาน​แบบ ActiveX ​ซึ่ง​ดู​ไม่​รู้​เรื่อง​ ​ว่า​จะ​ใช้​งาน​ได้​ยัง​ไง​ ​ผลสุดท้ายผมเลย​ต้อง​ใช้​งานกับ VB ​แทนซึ่ง​ก็ทำ​ออกมา​ได้​ดีมากๆ​เลยที​เดียว​ ​ทำ​ให้​ไม่​รู้ว่า​จะ​หาทางโปรแกรม​ C Win API ​ให้​ได้​ใกล้​เคียง​กับ​ VB ​ยัง​ไงดี

(หมายเหตุ: ​ในเดือน ​กรกฎาคม​ ​ปี​ 2550 ​พบว่า​ control ​ของ​ VB ​ที่ชื่อ​ Listview Control ​นั้น​มีจุดบอด​ใน​เรื่องการ​ Insert Item ​ใน​ขณะที่​ C Win API ​แก้​ไขปัญหานี้ผ่านไป​ได้​เรียบร้อย​แล้ว)

ตัวอย่างของ Listiview Control

สำหรับเรื่องของ Listview Control นี้ มีเกร็ดเิพิ่มเติมเล็กน้อย นั่นคือ คำว่า Listview เป็นชื่อเรียกของ control หน้าตาแบบนี้ใน VB ,VB.Net,C Sharp.Net เท่านั้น แต่ถ้าเป็นของ C/C++ จะเรียกชื่อ control ตัวนี้ว่า List Control เฉยๆ ซึ่งชื่อจะไปคล้ายกันกับ control อีกตัวหนึ่ง ก็คือ ListBox control ซึ่งอันนั้นทำได้แค่ใส่ list รายชื่อให้เราเลือกเฉยๆ ส่วน List หรือ Listview Control นี้มีลูกเล่นที่ทำอะไรได้มากกว่าครับ อย่าสับสนล่ะ เพราะเจอเข้ากับตัวเองมาแล้ว ตอนที่หาวิธีจัดการเรื่องการ Insert Item ทั้งของ VB และ C++ นั่นแหละ

ในส่วนของการสร้างโปรแกรมด้วย C Win API  วิธีการสร้าง​ ​โปรแกรมที่มี​ control ​ต่างๆ​เพื่อใช้​งาน​นั้น​ ​จะเริ่มต้น​จาก​การสร้าง​ Dialog ​ขึ้นมาก่อน​ ​แล้ว​ ​ใส่​ control ​ต่างๆ​ที่​ต้อง​การ​ใช้​งานลงไป​ ​จาก​นั้น​ ​ทำ​การ​ Map Code ​เข้า​กับ​ ID ​ของ​ Control ​นั้นๆ​ ​ส่วน​ MFC ​มีวิธี​ใช้​งานที่​แตกต่าง​กัน​ออกไปคือ​ Map ​เป็น​ class ​ไปเลย​ ​สำ​หรับ​ C++ Builder ​ใช้​งานเหมือน​กับ​ VB ​เลย​ ​ต่างแค่ภาษา​เท่า​นั้น​เอง​ (ซึ่งยากกว่า​เยอะ​เลย) ​ซึ่ง​ dialog ​ที่​ได้​ ​จะ​เก็บ​อยู่​ใน​ไฟล์​ ​ที่​เรียกว่า​ Resource Script ​พร้อม​กับ​ Header ​ที่ระบุ​ ID ​ของ​ Control ​นั้นๆ

ResEd Resource Script Editor

ขอเอารูปเก่ามาหากินอีกที นี่คือ ตัวอย่างการสร้างโปรแกรมแบบ Dialog Box แบบ C Win API ครับ

เมื่อดู​แล้ว​ ​ก็​ไม่​เห็นมีอะ​ไรเปลี่ยนแปลงมาก ​แค่​ต้อง​เปลี่ยนภาษาที่​ใช้​ Program ​ให้​เราทำ​งาน​ได้​ง่ายๆ​นี่นา​ ​จริงๆ​ ​แล้ว ทุกอย่างน่า​จะ​ลงตัวที่​ VB ​แล้ว​ถ้า​ไม่​เจออะ​ไรที่​ต้อง​เปลี่ยนอย่างร้ายแรงมากๆ

ส่วนจะเป็นอะไรนั้น คอยติดตามกันในตอนหน้า สวัสดีครับ.

Share

Leave a Reply