อยากลองฟื้นความจำอะงับเคยศึกษาค้างเอาไว้ ลืมไปหมดละ จะว่าด้วยเรื่องการเขียนเกมส์นะครับ
จะเขียนด้วย DirecX + Visual C++ V6 เน้อ มะรู้จะมีคนเข้ามาดูอะเป่า แต่มะเป็นไร ::หัวเราะ เหมาะกับคนที่มีพื้นฐาน C++ มาบ้างนะครับ
ก่อนจะเขียนเกมส์เราต้องมีหน้าต่างก่อนนะครับงั้นเรามาสร้างหน้าต่างWindows ตัวเป็นๆๆกันดีกว่า *ไม่ต้องไปเครียดมากนะครับแค่เป็นการเตรียมหน้าต่างไว้เฉยๆๆ ให้เราพอรู้จักหน้าตาและวิธีการสร้างแบบคร่าวๆๆก่อนนะครับ ถ้าอยากรู้ลึกต้องศึกษาเพิ่มเติมนะตะเอง อิอิ
ภาค1มาเริ่มสร้าง หน้าต่าง window กันเต๊อะ
วัตถุดิบ Visual c++ V6
เตรียมตัวก่อน
-สร้างProject เป็น win32 Application นะครับ ให้ชือProject ว่า testProject ละกัน
-สร้าง file Source code มาอีก 1 file ครับ ให้ชื่อ test.cpp เพื่อพิมพ์ code ลงไป
มาเริ่มกันดีก่าเน้อ อิอิ พิมพ์ code ลงไปใน test.cpp นะครับ
#define INITGUID //เป็นการบอกคอมไฟเลอร์ว่าให้สร้างโปรแกรมโดยใช้ GUI
#include<windows> //เรียกใช้ windows.h เพราะการสร้างหน้าต่างจะเป็นต้องอาศัยไฟล์นี้
HWND hWindow = NULL; //เราจะแยกแยะหน้าต่าง โดยกำหนดเบอร์ไม่ซำกันให้กับแต่ละหน้าต่างโดยกำหนดค่าเริ่มต้นเป็น NULL
void InitApp(HINSTANCE); //ประกาศฟังก์ชัน IniApp เพื่อกำหนดหน้าต่างตนแบบ แล้วก็สร้างหน้าต่างขี้นมากจากหน้าต่างต้นแบบนี้ อีกทีหนี่งนะครับ
int PASCAL WinMain(HINSTANCE,HINSTANCE,LPSTR,int); //ประกาศฟังชั่นหลักของของโปรแกรมนี้
LRESULT FAR PASCAL WinProc(HWND,UINT,WPARAM,LPARAM); //ประกาศฟังชั่น WinProc ไว้เพื่อจัดการข่าวสารต่างๆ ที่หน้าต่างได้รับ
void InitApp(HINSTANCE hinst)
{
WNDCLASS WinClass; //กำหนดตัวแปรสำหรับสร้างหน้าต่างต้นแบบ
WinClass.style=CS_HREDRAW|CS_VREDRAW; //กำหนดค่า ของหน้าต่างต้นแบบ ให้มีการวาดแบบแนวนอนและแนวตั้ง
WinClass.lpfnWndProc=WinProc; //กำหนดตำแหน่งของฟังก์ชันที่จัดการกับ message
WinClass.cbClsExtra=0; //กำหนดค่าหน่วยความจำพเเศษ แต่เราไม่ใช้ ให้เป็น 0
WinClass.cbWndExtra=0; //กำหนดค่าหน้างต่างแบบพิเศษ ก็มะได้ใช้อีก ให้เป็น 0
WinClass.hIcon=NULL; //กำหนดไอคอนของหน้าต่างต้นแบบ เป็น NULL คือให้ Windows เป็นตัวกำหนดเอง
WinClass.hCursor=LoadCursor(0,IDC_ARROW); // ให้เคอร์เซอร์เป็นรูปลูกศร
WinClass.hbrBackground=(HBRUSH)(COLOR_WINDOW); //ให้สีของหน้างต่างเป็นไปตามที่ Windows กำหนด
WinClass.hInstance=hinst; //กำหนดเบอร์ของหน้าต่าง WinClass.lpszMenuName=NULL; //กำหนดเบอร์ของเมนู ถ้าไม่ใช้ให้เป็น NULL
WinClass.lpszClassName="BasicWinClass"; //ชื่อของหน้างต่างต้นแบบ
if(!RegisterClass(&WinClass)) // เมื่อเราได้หน้าต่างต้นแบบแล้ว เราก็จะมาลงทะเบียนให้ Windows รู้จักหน้าต่างต้นแบบของเรา
return;
/* ต่อไปก็สร้างหน้าต่างต้นแบบ โดยกำหนดให้หน้าต่างชนิดซ้อนทับได้ และให้อยู่ที่ตำแหน่ง 0,0 และมีความกว้าง 640 จุด ยาว 480 จุด ถ้าสร้างสำเร็จก็จะได้เบอรหน้างต่างกลับมาที่ hWindow แต่ถ้าไม่สำเร็จจะได้ NULL */
hWindow=CreateWindow("BasicWinClass", //ชื่อหน้าต่างต้นแบบ
"MyWindows", // ชื่อหน้าต่างที่เราจะสร้าง
WS_OVERLAPPEDWINDOW, //กำหนดชนิดของหน้าต่าง
0, //ตำแหน่งแกน x มุมซ้ายบนของหน้าต่าง
0, // ตำแหน่งแกน y มุมซ้ายบนของหน้าต่าง
640, //ความกว้างของหน้าต่าง
480, //ความยาวของหน้าต่าง
NULL, //เบอร์ของหน้าต่างถ้าหน้าต่างนี้ถ้าเป็นหน้าต่างหลักให้กำหนดเป็น NULL
NULL, //เบอร์ของเมนูที่ใช้ ถ้าไม่มี ให้เป็น NULL
hinst, //เบอร์ของโปรแกรม
NULL); //ตำแหน่งของคำสั่งเสริมเวลาสร้างหน้าต่างถ้าไม่ใช้ให้เป็น NULL
}
int PASCAL WinMain(HINSTANCE Instance,HINSTANCE PrevInstance, LPSTR CmdLine,int nCmdShow)
{
MSG msg; //กำหนดตัวแปรที่จะเก็บ Message ที่ได้รับ
InitApp(Instance); //เรียกใช้ฟังก์ชัน InitApp เพื่อกำหนดคุณสมบัติของหน้าต่างต้นแบบ
ShowWindow(hWindow,nCmdShow); //แสดงหน้าต่างขึ้นมา
UpdateWindow(hWindow); // วาดหน้าต่างใหม่
while (GetMessage(&msg,NULL,0,0)) //วนลูปรอการออกจากโปรแกรม
{
/*แปล message ที่ได้ ด้วยฟังก์ชัน TranslateMessage แล้วส่งออกไหให้หน้าต่างด้วย DispatchMessage */
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam; //ส่งค่าคืนเมื่อจบโปรแกรม
}
LRESULT FAR PASCAL WinProc(HWND hwnd ,UINT Message,WPARAM wParam,LPARAM lParam)
{
switch(Message) ]//แยก message ที่ได้ด้วย switch[/color]
{
// ถ้าพบ message ชื่อ WM_DESTROY ก็ให้ออกโปรแกรม
// WM_DESTROY จะเกิดขึ้นเมื่อมีการคริกปุม "X" มุมขวาบนของหน้าต่าง
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd,Message,wParam,lParam); // ถ้าไม่พบ message ที่ต้องการ ก็ส่งต่อใปให้หน้าต่างอื่น
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ภาค2 ต่อเนื่องจากภาค1 นะครับเราจะเพื่มการใช้ keyboard เข้ามาด้วย
#define INITGUID
#include<windows>
HWND hWindow = NULL;
BOOL WantExitProgram = FALSE; //ประกาศตัวแปรWantExitProgram เป็นชนิด Boolean เพื่อเอาไว้เช็คเวลาต้องการออกจากโปรแกรม
void TestDraw(void);
void KeyDraw(WPARAM); //เพิ่มฟังก์ชันที่ใช้จัดการเกี่ยวกับ keyboard
void InitApp(HINSTANCE);
int PASCAL WinMain(HINSTANCE,HINSTANCE,LPSTR,int);
LRESULT FAR PASCAL WinProc(HWND,UINT,WPARAM,LPARAM);
void TestDraw(void)
[code]{


Reply With Quote

