ก่อนที่จะเข้าสู่ การเขียนโปรแกรม เราจะต้อง มาทำความเข้าใจ เกี่ยวกับส่วนประกอบพื้นฐาน บางส่วนที่สำคัญ ดังต่อไปนี้
โปรแกรมบนวินโดวส์ ที่เขียนด้วยภาษา C จะมีฟังก์ชั่นที่สำคัญอยู่ 2 ฟังก์ชั่น คือ WinMain() และ WindowFunc()
โดยในโปรแกรม WinMain() จะต้องมีการกระทำการ ขั้นตอนที่สำคัญดังต่อไปนี้
1. กำหนดรูปแบบของหน้าต่างโปรแกรมเรา (difine a window class)คราวนี้เราลองมาเขียนโปรแกรมกัน โดยก่อนอื่น ให้ทำการเปิดโปรแกรม Visual C++ Compiler แล้วทำตาม ขั้นตอน ที่ได้กล่าวถึงไปแล้ว ในบทที่ 1 จนถึงหน้าจอสุดท้ายในบทที่ 1จากนั้นให้ไป คลิ๊กที่เมนู Project -> setting จะได้หน้าจอ ไดอะลอกบ๊อก เกิดขึ้นดังในรูป
2. ลงทะเบียน window class นั้นกับระบบปฏิบัติการวินโดวส์
3. สร้างหน้าต่าง ของ window class ที่ลงทะเบียนไปแล้วนั้น
4. แสดงหน้าต่าง (window) ของโปรแกรมเรา ออกมาบนจอภาพ
5. เข้าสู่วงรอบการรับข่าวสาร จากระบบปฏิบัติการวินโดวส์ (running the message loop)

1. คลิ๊กเลือก Tab General
2. คลิ๊กเลือกหัวข้อ Microsoft Foundation Class โดยเลือกเป็น Not Using MFC เพราะเรายังไม่ใช้ Microsoft Foundation Class มาช่วยในตอนนี้
3. คลิ๊ก OK
ตอนนี้ Project Workspace ที่เราสร้างขึ้น ก็พร้อมที่จะทำการเขียน โปรแกรมได้แล้ว
ให้คลิ๊กที่ menu เลือกหัวข้อ File -> New ก็จะได้ไดอะลอกบ๊อกขึ้นมา ดังแสดงในรูป


จากนั้นให้เขียนโปรแกรมดังต่อไปนี้ลงใน พื้นที่ Document Window (1)
หลังจากเขียนโปรแกรมเสร็จเรียบร้อยแล้ว เราจะมาลองคอมไพล์ ทดสอบดูหน้าตา ของโปรแกรม ที่เราสร้างขึ้น กันดูนะคะ โดยให้ save โค้ด ที่เราเขียนขึ้นนี้เสียก่อน จากนั้น ให้คลิ๊กที่ เมนู เลือกคำสั่ง Build -> Build ชื่อโปรแกรม หรือกดปุ่ม F7 ก็ได้ หรือจะใช้ปุ่ม Tool bar (2) ก็ได้ตามสะดวกค่ะ#include <windows.h> LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); char WinName[ ] = "Winclassname"; int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpArgs, int nMode) { HWND hwnd; MSG msg; WNDCLASS wcl; /* กำหนด รูปแบบของหน้าต่างโปรแกรมของเรา (window class) */ wcl.hInstance = hThisInst; /* handle ของ instance ของโปรแกรมที่เราเขียนขึ้น*/ wcl.lpszClassName = WinName; /* ชื่อของ window class ของเรา */ wcl.lpfnWndProc = WindowFunc; /* วินโดวส์ฟังก์ชั่น */ wcl.style = 0; /* รูปแบบวินโดวส์ เป็นแบบมาตรฐาน */ wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* รูปแบบของไอคอนโปรแกรม */ wcl.hCursor = LoadCursor(NULL, IDC_ARROW); /* รูปแบบของเคอร์เซอร์ในโปรแกรมของเรา*/ wcl.lpszMenuName = NULL; /* ไม่มีเมนู */ wcl.cbClsExtra = 0; wcl.cbWndExtra = 0; /* ไม่มีข้อมูลเพิ่มเติม */ /* กำหนดสีของพื้นหลัง ของหน้าต่างโปรแกรมของเรา */ wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); /* ลงทะเบียน window class */ if(!RegisterClass(&wcl)) return FALSE; /* สร้างหน้าต่างโปรแกรมของเรา */ hwnd = CreateWindow( WinName, /* ชื่อของ window class */ "My window", /* ข้อความบน title bar ของหน้าต่างโปรแกรมเรา */ WS_OVERLAPPEDWINDOW, /* รูปแบบหน้าต่างเป็นแบบปกติ */ CW_USEDEFAULT, /* ตำแหน่งซ้ายสุดของหน้าต่างของเรา*/ CW_USEDEFAULT, /* ตำแหน่งบนสุดของหน้าต่างของเรา*/ CW_USEDEFAULT, /* ความกว้างของหน้าต่างของเรา*/ CW_USEDEFAULT, /* ความสูงของหน้าต่างของเรา */ /* ทั้ง 4 ค่าข้างต้น ให้วินโดวส์กำหนดให้เอง */ HWND_DESKTOP, /* ไม่มีหน้าต่างแม่ parent window */ NULL, /* ไม่มีเมนู */ hThisInst, /* handle ของ Instance ของโปรแกรมเรา */ NULL /* ไม่มีค่าพารามิเตอร์เพิ่มเติม */ ); /* แสดงหน้าต่างโปรแกรมเราบนจอภาพ */ ShowWindow(hwnd, nMode); UpdateWindow(hwnd); /* สร้างวงรอบการรับ message */ while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); /* แปลงค่ารหัสของแป้นพิมพ์ไปเป็น message */ DispatchMessage(&msg); /* ส่ง message กลับไปให้วินโดวส์ */ } return msg.wParam; /* ส่งค่า return code กลับไปให้ วินโดวส์ */ } /* ฟังก์ชั่นนี้จะถูกเรียกใช้โดยระบบปฏิบัติการวินโดวส์ และจะได้รับ message ที่ส่งมาจากคิวของ message (message que) */ LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY: /* ได้รับ message ให้ปิดโปรแกรมของเรา */ PostQuitMessage(0); /* ทำให้มีการส่ง message WM_QUIT ไปยังโปรแกรมเรา */ break; /* ซึ่งจะทำให้ฟังก์ชั่น GetMessage() คืนค่า 0 กลับมา */ /* ทำให้ออกจากลูปของ การรอรับ message */ default: /* ถ้าได้รับ message อื่น ๆ ให้ส่งกลับให้วินโดวส์*/ return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }

จากนั้นก็จะเข้าสู่ กระบวนการ compile และ link โปรแกรม โดยจะมีข้อความแสดง ด้านล่างของ compiler ถ้าไม่มีข้อผิดพลาดอะไร ก็จะแจ้งข้อความว่า ได้ไฟล์.exe 0 error, 0 warning ดังแสดงในรูปค่ะ

แล้วเราก็จะสามารถ ดูหน้าต่างโปรแกรม ที่เราสร้างขึ้นได้ โดยการเลือกที่เมนู Build -> Execute ชื่อไฟล์.exe หรือจะกดปุ่ม Tool bar (2) ก็ได้

นี่ไงคะ รูปร่างหน้าตา ของหน้าต่างโปรแกรม ที่เราสร้างขึ้น จะเห็นว่าเป็นจอหน้าต่างว่าง ๆ มีปุ่มย่อ,ขยาย,และปิด หน้าต่างเท่านั้น เราสามารถเลื่อนหน้าต่างนี้ไปมาได้ ด้วยการกดเมาส์ที่ title bar แล้วลากหน้าต่างไปมาได้

ไฟล์โปรแกรมของเรา ที่เขียนขึ้นจะถูกเก็บอยู่ใน โฟลเดอร์ที่ชื่อ \Program Files\Microsoft Visual Studio\Myprojects\ชื่อของโปรเจคท์เรา\debug นะคะ โดยเราสามารถ ดับเบิ้ลคลิ๊กชื่อไฟล์ เพื่อใช้งานได้ เช่นกันค่ะ

เป็นยังไงบ้างคะ เหนื่อยหรือเปล่า จะเห็นว่า การเขียนโปรแกรม บนวินโดวส์ โดยใช้ภาษา C ล้วน ๆ จะต้องเขียน โค้ดคำสั่ง จำนวนหลายสิบบรรทัด เพื่อให้แสดงหน้าต่างโปรแกรมง่าย ๆ ขึ้นมาได้ ยิ่งถ้าต้องการ เขียนโปรแกรม ที่ซับซ้อน ก็ยิ่งต้องเขียน โค้ดคำสั่งหลายพัน หลายหมื่นบรรทัด ซึ่งทำให้มีโอกาส เกิดความผิดพลาดในตัวโปรแกรม ได้ง่ายขึ้น จึงต้องมีการคิดวิธี ที่จะช่วยให้การเขียนโปรแกรมง่าย และสะดวกขึ้น โดยนำแนวคิดแบบ OOP และการ ใช้ MFC (microsoft foundation class) มาช่วย ในการเขียนโปรแกรม ซึ่งจะนำเสนอต่อไปในตอนหน้าค่ะ