
11
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM21
GUI –Window …(tt)
fiLớp cửa sổ(window class):
§Làmột loại cửa sổvới những tính chất xác định
§Mỗi lớp cửa sổ được đặc trưng bằng 1 tên (class-name)
dạng chuỗi; vàmột tập các thuộc tính mà HĐH Windows
sửdụng làm khuôn mẫu (template) khi tạo lập 1 cửa sổ
§Phân loại class:
fiLớp cửa sổcủa hệthống (System class)
§Được định nghĩa trước bởi HĐH Windows
§Các ứng dụng không thểhủy bỏ
fiLớp cửa sổdo ứng dụng định nghĩa:
§Được đăng ký bởi ứng dụng
§Cóthểhủy bỏkhi không còn sửdụng nữa
§Lớp toàn cục của ứng dụng (Application global class)
§Lớp cục bộcủa ứng dụng (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 lớp cửa sổcủa hệthống

12
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM23
GUI –Window …(tt)
fiLớp cửa sổ(window class): (tt)
§Mỗi cửa sổ đều thuộc một lớp xác định
§Cần phải đăng ký lớp trước khi tạo lập 1 cửa sổ,
nếu lớp chưa được đăng ký
§Đăng ký lớp cửa sổ:
fiCấu trúc dữliệu: WNDCLASS / WNDCLASSEX
fiHàm sửdụng: RegisterClass / RegisterClassEx
§Hủy bỏlớp cửa sổ đã đăng ký:
fiHàm sửdụng: UnregisterClass
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM24
GUI –Window …(tt)
VD. Đăng ký 1 lớp cửa sổ
WNDCLASS wc;
wc.lpszClassName= “MyClass”;// tên class
wc.lpfnWndProc= MyWndProc;// tên hàm xửlý 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 họa cấu 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ĩaThuộc tính
sốbyte dành riêng cho mỗi cửa sổthuộc class (<=
40 bytes)
cbWndExtra
sốbyte dành riêng cho class (<= 40 bytes)cbClsExtra
kiểu dáng củalớp (class style)Style
tên menu bar, chuỗi kết thúcbằng 0lpszMenuName
handle của brush, xác định cách tôvùng client; +1
nếu muốn sửdụng màu mặc định của hệthống.
VD. COLOR_BACKGROUND + 1
hbrBackground
handle của icon, xác định biểu tượng của cửasổhIcon
handle củacursor, xác định dạng cursor trong vùng
client
hCursor
Instance củaứng dụng thựchiện việc đăng kýclasshInstance
hàm tiếp nhận vàxửlýthông điệplpfnWndProc
tên lớp, chuỗi kết thúcbằng 0lpszClassName

14
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM27
GUI –Window …(tt)
fiHàm xử lý thông điệp (window procedure)
§Cónhiệm vụtiếp nhận vàxửlý các thông điệp
được gởi đến cho cửa sổ
§Sửdụng chung cho tất cảcác cửa sổcủa cùng
1 class
§Được gọi bởi HĐH Windows (làhàm Callback)
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM28
GUI –Window …(tt)
fiDạng tổng quát của 1 hàm xử lý thông điệp
LRESULT CALLBACK WndProc(
HWND hwnd, // handle của window nhận message
UINT uMsg, // ID của message
WPARAM wParam, // tham sốthứ1 củamessage (WORD)
LPARAM lParam) // tham sốthứ2 của message (LONG)
{
switch (uMsg) {
case WM_CREATE: // khởi tạo window.
return 0;
case WM_PAINT: // vẽlại(cập nhật) vùng client của window
return 0;
case WM_SIZE: // thay đổikíchthước vàvịtrícủa window.
return 0;
case WM_DESTROY: // hủy bỏwindow. Giải phóng các DL liên quan
return 0;
// …
// Xửlý 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 thuộc tính của cửa sổ:
§tên lớp (class name)
§tiêu đề (window title)
§kiểu dáng (window style)
§kiểu dáng mởrộng (extended window style)
§vịtrí(position –x, y)
§kích thước (size –w, h)
§cửa sổcha (parent or owner window handle)
§menu hay ID (menu handle or child-window
identifier)
§instance của ứng dụng sởhữu (application
instance handle)
Autumn 2005C4W -Basic -Nguyen Tri Tuan -DH.KHTN Tp.HCM30
GUI –Window …(tt)
VD. Tạo lập 1 cửa sổbằng 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

