Thứ Bảy, 8 tháng 2, 2014

Lập trình C Windows 07_Các khái niệm

5
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 9
Lập trình sự kiện (Even driven programming)
Phát sinh các sự kiện và thông điệp
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 10
Lập trình sự kiện (Even driven programming)…(tt)
Qui trình xử lý thông điệp
6
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 11
Lập trình sự kiện (Even driven programming)…(tt)
// Vòng lặp xử lý thông điệp trong 1 ứng dụng –
// Message loop
MSG msg;
// lấy thông điệp ra khỏi hàng đợi của ứng dụng
while (GetMessage(&msg, NULL, 0, 0))
{
// chuyển đổi các phím ảo (virtual key) thành các thông điệp ký tự
TranslateMessage(&msg);
// chuyển message đến hàm xử lý thông điệp của cửa
// sổ tương ứng
DispatchMessage(&msg);
}
return msg.wParam;
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 12
Các thành phần giao diện đồ họa (GUI)

Các dạng GUI cơ bản

Cửa sổ

Định nghĩa

Nguyên tắc quản lý

Phân loại

Lớp cửa sổ (window class)

Hàm xử lý thông điệp (window procedure)

Các thuộc tính
7
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 13
Các thành phần giao diện đồ họa (GUI)…(tt)

GUI: Graphics User Interface

Các dạng GUI cơ bản:

SDI - Single Document Interface

Một cửa sổ làm việc

Cho phép thay đổi kích thước cửa sổ (Resizeable)

Không có các cửa sổ con

Ví dụ: NotePad, Paint,…

MDI - Multiple Document Interface

Một cửa sổ làm việc chính (Frame window) và nhiều cửa sổ con (Child
window)

Cho phép thay đổi kích thước cửa sổ (Resizeable)

Cho phép Maximize/Minimize/Close các cửa sổ con

Ví dụ: Word, Excel, VC++,…

Dialog

Một cửa sổ làm việc

Thường kích thước cố định

Thường không có menu bar

Thường có các button, edit box, list-box,…

Ví dụ: Calculator, CD Player,…
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 14
Các thành phần giao diện đồ họa (GUI)…(tt)
Dialog, SDI, MDI
8
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 15
GUI – Window …(tt)

Định nghĩa:

là 1 vùng chữ nhật trên màn hình,

dùng để hiển thị kết quả output,

và nhận các input từ người dùng
¾
Công việc đầu tiên của 1 ứng dụng GUI là tạo 1
cửa sổ làm việc

Nguyên tắc quản lý:

Mô hình phân cấp: mỗi cửa sổ đều có 1 cửa sổ
cha (parent window), ngoại trừ cửa sổ nền
Desktop

Tại mỗi thời điểm, chỉ có 1 cửa sổ nhận input từ
user (Active/Focused window)
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 16
GUI – Window …(tt)

Phân loại:

Cửa sổ Desktop

Cửa sổ tiêu chuẩn

Cửa sổ hộp thoại (Dialog box)

Các control
9
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 17
GUI – Window …(tt)
App
Window
Dialog
box
Desktop
Window
Control
Child
window
Parent
window
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 18
GUI – Window …(tt)
Title-
bar
Minimized,
Restored,
Maximized
buttons
Scroll-
bar
Menu-
bar
Resized
border
Window
Caption
Window
Icon
Tool-bar
Client Area
Status-bar
Các thành phần của 1 cửa sổ tiêu chuẩn
10
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 19
GUI – Window …(tt)
Static-
Text
Drop-down
List
Combo-
box
(Edit-text
+ List-
box)
Push-
button
Property-
sheet
Check-
box
Các dạng control
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 20
GUI – Window …(tt)
Các dạng control
11
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 21
GUI – Window …(tt)

Lớp cửa sổ (window class):

Là 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ổ

Mỗi lớp cửa sổ được đặc trưng bằng 1 tên (class-name)
dạng chuỗi

Phân loại class:

Lớ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ỏ

Lớ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)
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 22
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
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 23
GUI – Window …(tt)

Lớp cửa sổ (window class):

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ổ:

Cấu trúc dữ liệu: WNDCLASS / WNDCLASSEX

Hàm sử dụng: RegisterClass / RegisterClassEx

Hủy bỏ lớp cửa sổ đã đăng ký:

Hàm sử dụng: UnregisterClass
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 24
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
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 25
GUI – Window …(tt)

Minh 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;
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 26
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úc bằ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ủa cursor, 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úc bằng 0lpszClassName
14
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 27
GUI – Window …(tt)

Hà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 (là hàm Callback)
Spring 2004C4W - Basic - Nguyen Tri Tuan - DH.KHTN Tp.HCM 28
GUI – Window …(tt)

Dạ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ủa message (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);
}
}

Không có nhận xét nào:

Đăng nhận xét