11
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM21
GUI Window …(tt)
fiLp ca s(window class):
§Làmt loi ca svi nhng tính cht xác định
§Mi lp ca s được đặc trưng bng 1 tên (class-name)
dng chui; vàmt tp các thuc tính mà HĐH Windows
sdng làm khuôn mu (template) khi to lp 1 ca s
§Phân loi class:
fiLp ca sca hthng (System class)
§Được định nghĩa trước bi HĐH Windows
§Các ng dng không thhy b
fiLp ca sdo ng dng định nghĩa:
§Được đăng ký bi ng dng
§Cóthhy bkhi không còn sdng na
§Lp toàn cc ca ng dng (Application global class)
§Lp cc bca ng dng (Application local class)
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM22
GUI Window …(tt)
The class for a static controlStatic
The class for a scroll barScrollBar
The class for an MDI client windowMDIClient
The class for a list boxListBox
The class for an edit control.Edit
The class for a combo box.ComboBox
The class for a buttonButton
DescriptionClass
Các lp ca sca hthng
12
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM23
GUI Window …(tt)
fiLp ca s(window class): (tt)
§Mi ca s đều thuc mt lp xác định
§Cn phi đăng ký lp trước khi to lp 1 ca s,
nếu lp chưa được đăng ký
§Đăng ký lp ca s:
fiCu trúc dliu: WNDCLASS / WNDCLASSEX
fiHàm sdng: RegisterClass / RegisterClassEx
§Hy blp ca s đã đăng ký:
fiHàm sdng: UnregisterClass
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM24
GUI Window …(tt)
VD. Đăng ký 1 lp ca s
WNDCLASS wc;
wc.lpszClassName= “MyClass”;// tên class
wc.lpfnWndProc= MyWndProc;// tên hàm xlý message
wc.hInstance= hInstance;
wc.hCursor= LoadCursor(hInstance, (LPSTR) IDC_CURSOR);
wc.hIcon= LoadIcon(hInstance, (LPSTR) IDI_ICON);
wc.hbrBackground= (HBRUSH) (COLOR_APPWORKSPACE + 1);
wc.lpszMenuName= (LPSTR) IDR_MENU;
wc.style= CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wc.cbClsExtra= 0;
wc.cbWndExtra= 0;
if (!RegisterClass(&wc)) return FALSE;
13
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM25
GUI Window …(tt)
fiMinh ha cu trúc WNDCLASS
typedef struct _WNDCLASS {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM26
GUI Window …(tt)
Ý nghĩaThuc tính
sbyte nh riêng cho mi ca sthuc class (<=
40 bytes)
cbWndExtra
sbyte nh riêng cho class (<= 40 bytes)cbClsExtra
kiu dáng calp (class style)Style
tên menu bar, chui kết thúcbng 0lpszMenuName
handle ca brush, xác định cách tôvùng client; +1
nếu mun sdng màu mc định ca hthng.
VD. COLOR_BACKGROUND + 1
hbrBackground
handle ca icon, xác định biu tượng ca cashIcon
handle cacursor, xác định dng cursor trong ng
client
hCursor
Instance cang dng thchin vic đăng kýclasshInstance
m tiếp nhn vàxlýtng điplpfnWndProc
tên lp, chui kết thúcbng 0lpszClassName
14
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM27
GUI Window …(tt)
fiHàm x lý thông đip (window procedure)
§Cónhim vtiếp nhn vàxlý các thông đip
được gi đến cho ca s
§Sdng chung cho tt ccác ca sca cùng
1 class
§Được gi bi HĐH Windows (làhàm Callback)
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM28
GUI Window …(tt)
fiDng tng quát ca 1 hàm x lý thông đip
LRESULT CALLBACK WndProc(
HWND hwnd, // handle ca window nhn message
UINT uMsg, // ID ca message
WPARAM wParam, // tham sth1 camessage (WORD)
LPARAM lParam) // tham sth2 ca message (LONG)
{
switch (uMsg) {
case WM_CREATE: // khi to window.
return 0;
case WM_PAINT: // vli(cp nht) vùng client ca window
return 0;
case WM_SIZE: // thay đổikíchthước vàvtríca window.
return 0;
case WM_DESTROY: // hy bwindow. Gii phóng các DL liên quan
return 0;
// …
// Xlý các message khác
default: return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}
15
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM29
GUI Window …(tt)
fiCác thuc tính ca ca s:
§tên lp (class name)
§tiêu đề (window title)
§kiu dáng (window style)
§kiu dáng mrng (extended window style)
§vtrí(position x, y)
§kích thước (size w, h)
§ca scha (parent or owner window handle)
§menu hay ID (menu handle or child-window
identifier)
§instance ca ng dng shu (application
instance handle)
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM30
GUI Window …(tt)
VD. To lp 1 ca sbng hàm CreateWindow
HWND hWnd =
CreateWindow(MyClass,// class name
“XYZ Application”, // window title
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // default x
CW_USEDEFAULT, // default y
CW_USEDEFAULT, // default Width
CW_USEDEFAULT, // default Height
(HWND) NULL, // parent handle
(HMENU) NULL, // MenuBar
hInstance, // application instance
NULL); // extra default data