Results 1 to 3 of 3

Thread: สนุกกับ C++

  1. #1


    อยากลองฟื้นความจำอะงับเคยศึกษาค้างเอาไว้ ลืมไปหมดละ จะว่าด้วยเรื่องการเขียนเกมส์นะครับ
    จะเขียนด้วย 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]{

  2. #2
    Junior Member
    Join Date
    Oct 2006
    Posts
    3


    /me นั่งจ้อง แล้วเกาหัว มันคืออะไรหว่า - -
    สงสัยต้องศึกษาอีกเยอะแหะเรา ยังไงก็ขอบคุณมากครับ

  3. #3
    Junior Member
    Join Date
    Jul 2007
    Posts
    7


    มานั่งรออ่านต่อนะครับ เขียนcode เเล้วมีอธิบายด้วยชอบๆ
    ขอบคุณครับ

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •