Back To Main
:: Rocking The Control ::
เรียนรู้เกี่ยวกับระบบควบคุม
เบื้องต้น โปรแกรมาเบิลลอจิก
คอนโทรล์ ไมโครคอนโทร -
เลอร์ และการประยุกต์ใช้งาน
เบื้องต้น
...........................................
.................................
Control  Overview
.................................
 + PLC Operation
      -
Toshiba T2
      -
SIEMENS S5
      -
SIEMENS S7
      -
Touch Screen
................................
 
Instrument &
               
Measurement
................................
 
Elec / MCS-51
 
Program Interface
...............................
+Basic Application
       -
SIEMENS plc
       -
TOSHIBA plc
       -
AT89C8252/53
...............................
This site is best viwed with IE4 or later version with resolution set at least 800 x 600



This site is host by geocities server

 
ET/COM/MCS->Win32 :Message I
     เมื่อเขียนโปรแกรมบน Windows จะต้องนึกเสมอว่าเป็นการ โปรแกรมแบบ Object Oriented Programming
ซึ่ง Object ทั้งหมดที่อ้างคือ Object ของ Window, Object ให้ชื่อwindow , จัดการตัวอักษร 9ล9 ซึ่งเรารู้จัก Object
ในนาม "Window"
..... ใน Application ที่แสดงเราจะเห็น push button,radio box,scroll bar เราเรียก จะเรียกว่า"child window" "control window" หรือ "child window control" ซึ่งการที่โปรแกรมของเราจะรับรู้ผู้ใช้โปรแกรมต้องการอะไร เช่น การ click mouse .... โปรแกรมจะรับรู้โดยการรับ "Message" จาก Window ซึ่งWindow จะส่ง message ต่างๆโดยการเรียกใช้ function ที่อยู่ภายในโปรแกรมคือ WndProc หรือ "Window Procedure" ซึ่งจะทำหน้าที่ในการจัดการ Message โดย Window ที่เราสร้าขึ้นจะสร้างขึ้นจากพื้นฐานของ "Window class" และ window class นี้จะเป็นตัวกำหนด window procedure
ซึ่ง window หลาย window ปุ่มทุกปุ่ม ที่ถูกสร้างขึ้นจะอยู่บนพื้นฐานอันเดียวกันคือ window class และจะใช้ window procedure ตัวเดียวกันในการจัดการกับ Message เมื่อโปรแกรมของเรา run ขึ้น window จะสร้างคิวสำหรับเก็บ message ที่เกิดขึ้นจากโปรแกรม ของเรา (Message Queue) ซึ่งเราจะรับเอา Message นี้มาตอบสนองเหตุการณ์ที่เกิดขึ้นและจัดการส่งให้ window procedure เพื่อตอบสนองต่อผู้ใช้ต่อไป
    ในตอนนี้เราจะสร้าง windows ขึ้นมา ซึ่งจะมีขั้นตอนหลักๆคือ
1. กำหนด window class และลงทะเบียน(register) window class ที่เรากำหนดขึ้น
2. กำหนดรูปแบบของ window ที่จะแสดง และแสดง window
3. จัดการกับ message
4. ตอบสนองต่อ message (WndProc)

1. กำหนด window class และลงทะเบียน
    window class เป็นโครงสร้างข้อมูลที่ใช้รวบรวมโครงสร้างพื้นฐานและคุณสมบัติต่างๆของ windows ไว้ เช่น เมนู cursor backgroung เป็นต้น ซึ่งเราจะสามารถเข้าถึงข้อมูล และกำหนดข้อมูลในโครงสร้างได้โดย

กำหนดชื่อ class :
static TCHAR szMyName[ ] = "myWndClass" ;

กำหนดตัวแปรเข้าถึงข้อมูล
WNDCLASSEX   wndClass;

เข้าถึงและกำหนดข้อมูลต่างๆ
wndClass.cbSize = sizeof(WNDCLASSEX); ขนาดของโครงสร้างข้อมูล
wndClass.style = CS_HREDRAW | CS_VREDRAW ;รูปแบบของwindow
wndClass.lpfnWndProc = WndProc; pointer ชี้ไปยัง callback function
wndClass.cbClsExtra = 0; กำนหดช้อมูลพิเศษ
wndClass.cbWndExtra = 0;กำหนดข้อมูลพิเศษ
wndClass.hInstance = hInstance; Handle ของ application
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); รูปแบบของ icon 32*32
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); รูปแบบของ cursor
wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); background
wndClass.lpszMenuName = NULL; เมนู
wndClass.lpszClassName = szMyClass;ชื่อclass
wndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);Application icon 16*16
หมายเหตุ: รูปแบบอื่นไม่ว่าจะเป็น style หรือข้อมูลอื่นๆสามารถศึกษาได้จาก MSDN

เมื่อได้ทำการกำนหด window class แล้วก็จะต้องทำการลงทะเบียน (register) class ที่เรากำหนดขึ้นโดย
if(!RegisterClassEx(&wndClass))
{
           .........ไม่สามารถลงทะเบียนได้......
           return 0;
}

2. กำหนดรูปแบบของ window และการ display
    เมื่อได้ลงทะเบียน class ไปแล้วเราก็จะกำหนดรูปแบบของ window ที่จะแสดงได้จากฟังก์ชั่น CreateWindowEx ซึ่งมีดโครงสร้างดังนี้
      HWND CreateWindowEx(
                                DWORD dwExStyle, // extended window style
                                LPCTSTR lpClassName, // pointer to registered class name
                                LPCTSTR lpWindowName, // pointer to window name
                               DWORD dwStyle, // window style
                               int x, // horizontal position of window
                               int y, // vertical position of window
                               int nWidth, // window width
                               int nHeight, // window height
                               HWND hWndParent, // handle to parent or owner window
                               HMENU hMenu, // handle to menu, or child-window identifier
                              HINSTANCE hInstance, // handle to application instance
                              LPVOID lpParam // pointer to window-creation data
);

และเราจะกำหนดการสร้าง window โดย

กำหนด handle เพื่อเก็บค่า
HWND   hwnd;

กำหนดรูปแบบต่างๆตามโครงสร้างข้อมูลข้างต้น

hwnd = CreateWindowEx (NULL,
            szMyClass,
           "This is caption",
         WS_OVERLAPPEDWINDOW | WS_VISIBLE,
         CW_USEDEFAULT,
         CW_USEDEFAULT,
         CW_USEDEFAULT,
         CW_USEDEFAULT,
         NULL,
         NULL,
         hInstance,
         NULL) ;

สำหรับรูปแบบหรือ prefix ต่างๆสามารถศึกษาได้จาก MSDN
..... ในตอนนี้เราได้ทำการสร้าง window ไว้แล้ว แต่ winbdow ดังกล่าวจะยังไม่แสดงบนหน้าจอ โดยเราจะแสดง window ได้โดยการเรียกใช้ฟังก์ชั่น

ShowWindow (hwnd, iCmdShow) ;

Referrence :
บทความใน series ของ WIN32 API Programming เรียบเรียง จาก
Programming Windows 5 th Edittion : Charles Petzold
.............................................................................................................................................................
Copyright ©2002 EPrivacy Homepage.
For more information, and any suggestion please contact
EPrivacy Webmaster 
............................................................................................................................................................