::
Rocking The Control ::
|
เรียนรู้เกี่ยวกับระบบควบคุม
เบื้องต้น โปรแกรมาเบิลลอจิก
คอนโทรล์ ไมโครคอนโทร -
เลอร์ และการประยุกต์ใช้งาน
เบื้องต้น
........................................... |
|
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
|
|
|
|