คราวนี้เรามาลองเขียนโปรแกรม โดยใช้ MFC กันดูนะคะ อันดับแรกก็ทำการสร้าง โปรเจคขึ้นมาใหม่ โดยทำ ตามขั้นตอนที่ ได้กล่าวไปแล้ว ในบทที่ 1 ก็จะได้หน้าจอหลัก ของ Visual C++ compiler ดังแสดงในรูป

ต่อไปนี้แหละค่ะ เป็นขั้นตอนสำคัญ เพราะตอนนี้ เราจะต้อง set ชนิดของโปรเจ็คให้ใช้ MFC ด้วย โดยให้ ไปคลิ๊กที่เมนู Project เลือกหัวข้อ Setting จะได้ไดอะล็อก ออกมาดังแสดงในรูป

จะเห็นว่าในหัวข้อ Microsoft Foundation Class นั้น จะมีตัวเลือก 3 ตัวเลือกคือ

แล้วทำตามขั้นตอนคือ

จากนั้นก็ให้เขียนโปรแกรม ตามตัวอย่างข้างล่างนี้ ลงในหน้าต่าง 1
จากนั้นก็ทำการ Build Source Code ของเรา ให้เป็นโปรแกรม ที่ทำงานได้ โดยเลือก เมนู Build -> Build ชื่อโปรแกรม หรือกด F7 หรือเลือกใช้ Tool bar ก็ได้ เหมือนในบทที่ 3 นะคะ#include <afxwin.h> /* สืบทอดคลาสหน้าต่างหลัก จาก คลาส CFramWnd */ class CMainWin: public CFrameWnd { public: CMainWin(); /* ประกาศ function contructor */ DECLARE_MESSAGE_MAP() /* ประกาศ message map ของหน้าต่างหลักนี้ */ }; CMainWin::CMainWin() { Create(NULL, "Simple MFC program"); } /* สืบทอดคลาสที่ใช้ควบคุมโปรแกรม จากคลาส CWinApp */ class CApp : public CWinApp { public: BOOL InitInstance(); /* ฟังก์ชั่นในการ สร้างวัตถุเป้าหมาย ของคลาส */ }; /* รายละเอียดของ ฟังก์ชั่น */ BOOL CApp::InitInstance() { m_pMainWnd = new CMainWin; m_pMainWnd -> ShowWindow(m_nCmdShow); m_pMainWnd -> UpdateWindow(); return TRUE; } /* รายละเอียดของ message map */ BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd) END_MESSAGE_MAP() CApp myapp; /* สร้างวัตถุเป้าหมาย ของคลาสของโปรแกรมของเรา */

จะเห็นว่า การเขียนโปรแกรม แบบเดียวกัน โดยใช้ MFC มาช่วย จะทำให้เราเขียน โค้ดคำสั่งของโปรแกรม น้อยลงมาก
คราวนี้เรามาดูรายละเอียด ของโปรแกรมนี้ กันนะคะ
โปรแกรมที่เขียนขึ้น โดยใช้ MFC จะต้องมีการ include ไฟล์ afxwin.h ไว้ด้วยเสมอ ซึ่งภายในไฟล์นี้ ได้มีการกำหนดค่า ต่าง ๆ ที่จะใช้กับโปรแกรม ที่เขียนด้วย MFC ไว้เรียบร้อยแล้ว#include <afxwin.h>
เป็นการประกาศคลาสใหม่ ที่ชื่อ CMainWin โดยสืบทอดมาจาก คลาส CFrameWnd ซึ่งเป็น คลาสที่ทำหน้าที่ กำหนด ลักษณะของหน้าต่าง โปรแกรมของเรา โดยภายในคลาสนี้ ได้มีการประกาศ function constructor ซึ่งเป็นฟังก์ชั่น ที่จะถูกเรียกใช้งานทันที ที่มีการสร้างวัตถุเป้าหมาย ของคลาสนี้ขึ้นมา และยังมีการประกาศ มาโคร ที่ใช้ในกระบวนการ map message เอาไว้ด้วย ซึ่งรายละเอียดของ การ map message นี้จะได้ กล่าวถึงในบทต่อไปclass CMainWin: public CFrameWnd { public: CMainWin(); /* ประกาศ function contructor */ DECLARE_MESSAGE_MAP() /* ประกาศ message map ของหน้าต่างหลักนี้ */ };
เป็นการประกาศคลาสใหม่ ที่ชื่อ CApp ซึ่งสืบทอด มาจากคลาส CWinApp คลาสนี้ เป็นตัวกำหนดลักษณะ ของ โปรแกรมของเรา โดย ภายในคลาสนี้ มีการประกาศ ฟังก์ชั่นสมาชิกชื่อ InitInstance() อยู่ในคลาสด้วยclass CApp : public CWinApp { public: BOOL InitInstance(); /* ฟังก์ชั่นในการ สร้างวัตถุเป้าหมาย ของคลาส */ };
ชั้นตอนการ ทำงานของ โปรแกรมเรา จะเริ่มขึ้นจาก บรรทัดต่อไปนี้ค่ะ
ซึ่งเป็นคำสั่ง ให้มีการสร้างวัตถุเป้าหมาย (object) ของคลาส CApp ขึ้นมา เมื่อมีการสร้างวัตถุเป้าหมาย ก็จะ ทำให้ มีการเรียกฟังก์ชั่น InitInstance(); ซึ่งเป็นฟังก์ชั่นสมาชิกของ คลาสนี้ ขึ้นมาทำงานโดยอัตโนมัติCApp myapp;
เมื่อฟังก์ชั่น InitInstance() ถูกเรียกให้ทำงาน ก็จะมีการทำงานตามขั้นตอน ดังต่อไปนี้ค่ะBOOL CApp::InitInstance() { m_pMainWnd = new CMainWin; m_pMainWnd -> ShowWindow(m_nCmdShow); m_pMainWnd -> UpdateWindow(); return TRUE; }
คำสั่ง Create(NULL, "Simple MFC prgram"); ก็จะทำให้ มีการสร้าง หน้าต่างหลัก ของโปรแกรม ของเราขึ้นมา แต่ขั้นตอนนี้ ยังไม่มี รูปหน้าต่าง ของโปรแกรมเรา ขึ้นมาบนจอภาพนะคะCMainWin::CMainWin() { Create(NULL, "Simple MFC program"); }
โดยขึ้นต้นด้วย คำสั่งมาโคร BEGIN_MESSAGE_MAP(ชื่อคลาสที่มีการ map messagge นี้, ชื่อคลาสแม่) จะสังเกตว่า ไม่มีเครื่องหมาย ';' ต่อท้ายคำสั่งนี้BEGIN_MESSAGE_MAP(CMainWin,CFrameWnd) END_MESSAGE_MAP()
สุดท้ายนี้ คุณ ๆ ผู้อ่าน บทความนี้ หลาย ๆ ท่าน อาจจะงง ๆ อยู่ ก็ขอให้ ลองไปหาหนังสือ เกี่ยวกับ การเขียนโปรแกรม ภาษา C++ มาอ่านดูนะคะ อย่างเช่น หนังสือ "การเขียน โปรแกรมแบบ โอโอพี ด้วยบอร์แลนด์ และเทอร์โบซี" ที่เรียบเรียง โดยคุณ ราบิน เดอร์ ศรีกิจจาภรณ์ ก็จะช่วยทำให้ คุณ ๆ มีความเข้าใจ เกี่ยวกับ คลาส (class), virtual function, และ overload function ได้ดียิ่งขึ้นค่ะ ส่วนฟังก์ชั่น คำสั่งต่าง ๆ ที่พบใน บทความนี้ ก็ให้หารายละเอียด เพิ่มเติมได้จาก ในแผ่นซีดี MSDN ที่ให้มา พร้อมกับแผ่น โปรแกรม Visual C++ 6 compiler นะคะ
ขอให้มีความสุข กับการเขียนโปรแกรมนะคะ พบกันใหม่ตอนหน้าค่ะ แจ๋ว