Tài liệu Lập trình Windows - Chương 1: Tổng quan về Lập trình Windows và thư viện MFC: GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 1
Tổng quan về Lập
trình Windows và
thư viện MFC
GV: Nguyễn Thị Mai Trang 2
Mục tiêu
Giới thiệu tổng quan về lập trình Windows
Giới thiệu thư viện lập trình MFC và môi
trường Visual C++
Qua chương này, sinh viên có thể hiểu và
vận dụng các lớp trong thư viện MFC để
viết chương trình ở mức tạo một ứng dụng
đơn giản nhất.
GV: Nguyễn Thị Mai Trang 3
Nội dung
Tổng quan về Lập trình Windows
Thư viện lập trình MFC
Làm quen với Visual C++ 6.0
GV: Nguyễn Thị Mai Trang 4
Bài 1: Tổng quan về Lập trình Windows
Giao diện người dùng kiểu đồ họa:
– Các ứng dụng Windows có giao diện thống
nhất
• Cửa sổ hình chữ nhật
• Thanh tiêu đề
• Thanh thực đơn (menu)
• Thanh công cụ (Toolbar)
• Thanh cuộn (Scrollbar)
• Hộp hội thoại (Dialog)
• V
GV: Nguyễn Thị Mai Trang 5
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 6
Bài 1: Tổng quan về Lập trình Windows
Tính đa nhiệm:
– Mỗi chương trì...
348 trang |
Chia sẻ: Khủng Long | Lượt xem: 1392 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình Windows - Chương 1: Tổng quan về Lập trình Windows và thư viện MFC, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 1
Tổng quan về Lập
trình Windows và
thư viện MFC
GV: Nguyễn Thị Mai Trang 2
Mục tiêu
Giới thiệu tổng quan về lập trình Windows
Giới thiệu thư viện lập trình MFC và mơi
trường Visual C++
Qua chương này, sinh viên cĩ thể hiểu và
vận dụng các lớp trong thư viện MFC để
viết chương trình ở mức tạo một ứng dụng
đơn giản nhất.
GV: Nguyễn Thị Mai Trang 3
Nội dung
Tổng quan về Lập trình Windows
Thư viện lập trình MFC
Làm quen với Visual C++ 6.0
GV: Nguyễn Thị Mai Trang 4
Bài 1: Tổng quan về Lập trình Windows
Giao diện người dùng kiểu đồ họa:
– Các ứng dụng Windows cĩ giao diện thống
nhất
• Cửa sổ hình chữ nhật
• Thanh tiêu đề
• Thanh thực đơn (menu)
• Thanh cơng cụ (Toolbar)
• Thanh cuộn (Scrollbar)
• Hộp hội thoại (Dialog)
• V
GV: Nguyễn Thị Mai Trang 5
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 6
Bài 1: Tổng quan về Lập trình Windows
Tính đa nhiệm:
– Mỗi chương trình chiếm một phần tài nguyên của hệ
thống và cĩ một phần bộ nhớ thường trú
– Nhiều chương trình cĩ thể được kích hoạt chạy cùng
một lúc
– Tư tưởng hướng đối tượng: các cửa sổ ứng dụng
chính và các cửa sổ con là các đối tượng của lớp cửa
sổ được đăng ký trước.
Giao diện đồ họa độc lập thiết bị
– Cho phép tạo các đối tượng đồ họa và định dạng văn
bản
– Chương trình viết cho Windows khơng điều khiển trực
tiếp thiết bị xuất ra màn hình, máy in mà thơng qua
một ngơn ngữ lập trình đồ họa gọi là Giao diện thiết bị
đồ họa (Graphics device Interface – GDI)
GV: Nguyễn Thị Mai Trang 7
Bài 1: Tổng quan về Lập trình Windows
Kiến trúc hướng thơng điệp (message driven):
– Windows và các ứng dụng Windows hoạt động theo
cơ chế truyền – nhận thơng điệp.
– Các hoạt động của chương trình thay đổi tùy theo
thơng điệp nhận được.
– Thơng điệp được truyền qua lại giữa những ứng dụng
và cửa sổ, giữa các ứng dụng với nhau.
– Cửa sổ ứng dụng được tự động vẽ lại mỗi khi cĩ sự
thay đổi về kích thước. Điều này được thực hiện nhờ
hệ điều hành gởi thơng điệp cho chương trình.
GV: Nguyễn Thị Mai Trang 8
Bài 1: Tổng quan về Lập trình Windows
Tài nguyên:
– Biểu tượng (icons).
– Con trỏ (cursors).
– Hình ảnh (Bitmaps).
– Bảng các chuỗi hằng (string tables).
– Bảng phím tắt (Accelerator).
– Hộp hội thoại (Dialog)
– Thanh thực đơn (menu)
– Thanh cơng cụ (toolbar)
– Siêu văn bản (HTML).
GV: Nguyễn Thị Mai Trang 9
Bài 1: Tổng quan về Lập trình Windows
Tài nguyên (tt)
– Tài nguyên được Windows cung cấp sẵn (tài
nguyên chuẩn).
– Tài nguyên do người sử dụng tạo thơng qua
một tập tin tài nguyên cĩ phần mở rộng là .rc
(Resource Script)
– Mơi trường lập trình Windows cung cấp cơng
cụ để người sử dụng dễ dàng tạo, soạn thảo
nội dung các tài nguyên.
GV: Nguyễn Thị Mai Trang 10
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 11
Bài 1: Tổng quan về Lập trình Windows
Giao diện lập trình ứng dụng API (Application
Programming Interface):
– Là những hàm mà hệ điều hành Windows cung cấp
để cho các ứng dụng cĩ thể sử dụng truy cập các tài
nguyên trong hệ thống.
– Những hàm trên được chứa trong các thư viện liên
kết động (Dinamic Link Library – DLL) của hệ thống
và mọi ứng dụng đều cĩ thể truy cập đến các hàm
đĩ.
– Các chương trình ứng dụng sử dụng các hàm API
thơng qua các lời gọi hàm.
– Trong API cĩ một số hàm cĩ chức năng duy trì sự
độc lập thiết bị đồ họa, các hàm này gọi là giao diện
thiết bị đồ họa GDI (Graphics Device Interface).
GV: Nguyễn Thị Mai Trang 12
Bài 1: Tổng quan về Lập trình Windows
Cơ chế gởi – nhận thơng điệp
– Mọi sự kiện xảy ra trên một chương trình
Windows đều thơng qua những thơng điệp
(messages).
– Thơng điệp phát sinh khi: nhấn một nút trên
bàn phím, di chuyển hoặc nhấn chuột, thay
đổi kích thước cửa sổV
– Với mỗi thơng điệp nhận được, chương trình
ứng dụng sẽ cĩ hành động thích hợp đáp
ứng với thơng điệp.
GV: Nguyễn Thị Mai Trang 13
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 14
Bài 1: Tổng quan về Lập trình Windows
Cĩ hai dạng thơng điệp:
– Thơng điệp được gởi vơ hàng đợi thơng điệp để chờ
xử lý (queue message): bao gồm các thơng điệp
được phát sinh từ bàn phím, chuột
(WM_MOUSEMOVE, WM_LBUTTONDOWN,
WM_KEYDOWN, WM_CHAR,V)
• Windows dùng một hàng đợi để chứa thơng điệp nhận được,
mỗi một chương trình đều cĩ một hàng đợi chứa thơng điệp
riêng.
• Windows sẽ chuyển thơng điệp từ hàng đợi chứa thơng điệp
của hệ thống đến hàng đợi chứa thơng điệp của chương
trình.
• Hàng đợi chứa thơng điệp của chương trình chịu trách nhiệm
giữ tất cả các thơng điệp của tất cả các cửa sổ thuộc chương
trình.
GV: Nguyễn Thị Mai Trang 15
Bài 1: Tổng quan về Lập trình Windows
Thơng điệp được gởi trực tiếp đến thủ tục xử lý khơng
qua hàng đợi (nonqueue message), bao gồm các thơng
điệp thời gian, thơng điệp vẽ, và thơng điệp thốt như
WM_TIMER, WM_PAINT, WM_QUIT.
Xử lý thơng điệp:
– Một ứng dụng phải xĩa và xử lý những thơng điệp được gởi tới
hàng đợi của ứng dụng đĩ.
– Đối với một ứng dụng đơn tiểu trình thì sử dụng một vịng lặp
thơng điệp (message loop) trong hàm WinMain để nhận thơng
điệp từ hàng đợi và gởi tới thủ tục xử lý cửa sổ tương ứng.
– Với những ứng dụng đa tiểu trình thì mỗi một tiểu trình cĩ tạo
cửa sổ thì sẽ cĩ một vịng lặp thơng điệp để xử lý thơng điệp của
những cửa sổ trong tiểu trình đĩ.
GV: Nguyễn Thị Mai Trang 16
Bài 1: Tổng quan về Lập trình Windows
Một số thơng điệp Windows
– WM_CHAR: Một ký tự nhập từ bàn phím
– WM_CREATE: Một cửa sổ được tạo.
– WM_DESTROY: Một cửa sổ được hủy.
– WM_LBUTTONDOWN: Nhấn phím trái chuột
– WM_LBUTTONUP: Nhả phím chuột
– WM_PAINT: Một cửa sổ được vẽ lại
– WM_QUIT: Kết thúc ứng dụng
– WM_SIZE: Thay đổi kích thước cửa sổ
– WM_TIMER: sự kiện về thời gian
– V
GV: Nguyễn Thị Mai Trang 17
Bài 1: Tổng quan về Lập trình Windows
Trình tự thực hiện một chương trình
Windows
– Đăng ký lớp cửa sổ
– Tạo cửa sổ
– Hiển thị cửa sổ
– Xử lý các thơng điệp nhờ vịng lặp message
và thủ tục cửa sổ
GV: Nguyễn Thị Mai Trang 18
Bài 1: Tổng quan về Lập trình Windows
Source code một chương trình Windows
GV: Nguyễn Thị Mai Trang 19
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 20
Bài 1: Tổng quan về Lập trình Windows
GV: Nguyễn Thị Mai Trang 21
Bài 1: Tổng quan về Lập trình Windows
Kết quả hiển thị
GV: Nguyễn Thị Mai Trang 22
Bài 1: Tổng quan về Lập trình Windows
Hàm WinMain
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
Handle đến chương
trình hiện hành
Tham số dòng lệnh
Cách hiển thị cửa sổ (SW_SHOWNORMAL hoặc
SW_SHOWMINNOACTIVE)
Handle đến
chương trình
trước đó
GV: Nguyễn Thị Mai Trang 23
Bài 1: Tổng quan về Lập trình Windows
Chức năng của hàm WinMain
– Định nghĩa lớp cửa sổ ứng dụng.
– Đăng ký lớp cửa sổ vừa định nghĩa.
– Tạo ra thể hiện cửa sổ của lớp đã cho.
– Hiển thị cửa sổ.
GV: Nguyễn Thị Mai Trang 24
Bài 1: Tổng quan về Lập trình Windows
Hàm WndProc
LRESULT CALLBACK WndProc ( HWND,
UINT,
WPARAM,
LPARAM );
Định danh cửa sổ
Định danh
thơng điệp
Thơng tin bổ sung kèm
theo thơng điệp
GV: Nguyễn Thị Mai Trang 25
Bài 1: Tổng quan về Lập trình Windows
Chức năng của hàm WndProc
– Xử lý tất cả các thơng điệp cĩ liên quan đến cửa sổ
– Một chương trình Windows cĩ thể chứa nhiều hơn
một hàm xử lý cửa sổ.
– Một hàm xử lý cửa sổ luơn kết hợp với một lớp cửa
sổ đặc thù.
– Hàm xử lý cửa sổ thường được đặt tên là WndProc.
– Hàm WndProc cĩ chức năng giao tiếp với bên ngồi,
tức là với Windows, tồn bộ các thơng điệp gởi đến
cửa sổ đều được xử lý qua hàm này.
GV: Nguyễn Thị Mai Trang 26
Bài 1: Tổng quan về Lập trình Windows
Cấu trúc lớp cửa sổ
Typedef struct _WNDCLASSEX{
UINT cbSize; //kích thước của cấu trúc
UINT style; //kiểu lớp
WNDPROC lpfnWndProc;//con trỏ đến thủ tục cửa sổ
int cbClsExtra;//các byte phụ trội để thêm
vào cấu trúc WNDCLASS khi đăng ký
int cbWndExtra; ;//các byte phụ trội để thêm
vào các đối tượng cửa sổ được tạo bởi lớp này
HANDLE hInstance; //istance làm chủ class này
HICON hIcon; //biểu tương khi cửa sổ hiển thị
HCURSOR hCursor; //con trỏ chuột
HBRUSH hbrBackground; //màu nền
LPCTSTR lpszMenuName; //tên menu
LPCTSTR lpszClassName; //tên lớp nhận biết
WNDCLASS này cho hệ thống
} WNDCLASSEZ;
GV: Nguyễn Thị Mai Trang 27
Bài 1: Tổng quan về Lập trình Windows
Đăng ký lớp cửa sổ
– Sau khi định nghĩa một lớp cửa sổ, phải đăng
ký lớp cửa sổ đĩ bằng hàm RegisterClass
– ATOM RegisterClass( CONST WNDCLASS *
lpWndClass );
GV: Nguyễn Thị Mai Trang 28
Bài 1: Tổng quan về Lập trình Windows
Hàm tạo cửa sổ
HWND hwnd = CreateWindow (
ClassName, // Tên lớp cửa sổ đã đăng ký
WindowName, // tiêu đề cửa sổ
Style, // kiểu cửa sổ
x, // Vị trí ngang ban đầu
y, // Vị trí dọc ban đầu
Width, // Độ rộng ban đầu
Height, // Độ cao ban đầu
Parent, // Định danh của cửa sổ cha
Menu, // Định danh của menu
Instance, // Định danh thể hiện ứng dụng
Param); // Các tham số ban đầu
GV: Nguyễn Thị Mai Trang 29
Bài 1: Tổng quan về Lập trình Windows
Xử lý thơng điệp
while ( GetMessage(&msg, NULL, 0 ,0) )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
– Hàm GetMessage sẽ trả về 0 nếu msg chứa thơng điệp cĩ định
danh WM_QUIT (0x0012), khi đĩ vịng lặp thơng điệp ngưng và
ứng dụng kết thúc. Ngược lại thì hàm sẽ trả về một giá trị khác 0
với các thơng điệp khác
GV: Nguyễn Thị Mai Trang 30
Bài 1: Tổng quan về Lập trình Windows
Cấu trúc của thơng điệp
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
Định danh của cửa sổ
phát sinh thơng điệp
Định danh của
thơng điệp
thơng tin phụ thuộc
vào từng thơng điệp
cụ thể
Thời gian đặt
thơng điệp trong
hàng đợiTọa độ của chuột
GV: Nguyễn Thị Mai Trang 31
Bài 1: Tổng quan về Lập trình Windows
Cấu trúc của thơng điệp (tt)
– hwnd: Định danh của cửa sổ mà thơng điệp phát sinh.
– message : Định danh của thơng điệp, ví dụ như thơng
điệp phát sinh khi bấm nút chuột trái là
WM_LBUTTONDOWN cĩ giá trị 0x0201.
– wParam : Tham số 32-bit chứa các thơng tin phụ
thuộc vào từng thơng điệp cụ thể.
– lParam : Tham số 32-bit phụ thuộc vào thơng điệp.
– time : Thời gian đặt thơng điệp trong hàng đợi.
– pt : Tọa độ của chuột khi đặt thơng điệp vào hàng đợi
GV: Nguyễn Thị Mai Trang 32
Bài 1: Tổng quan về Lập trình Windows
Quy ước đặt tên Hungary: dùng tiếp đầu
ngữ để mơ tả kiểu dữ liệu, theo sau là tên
biến
b BOOL
c or ch char
clr COLORREF
cx, cy horizontal or
vertical
dw DWORD
h Handle
l LONG (long int)
n int
p Pointer
sz chuỗi kết thúc bởi ‘\0’
w WORD
GV: Nguyễn Thị Mai Trang 33
Bài 2: Thư viện lập trình MFC
Thư viện lập trình MFC (Microsoft Foundation
Class library) là một cơng cụ quan trọng để xây
dựng nhanh những chương trình ứng dụng trên
nền Windows bằng ngơn ngữ C++
MFC được viết ra với mục đích làm cho việc lập
trình Windows dễ dàng hơn bằng cách cung cấp
những lớp đối tượng với những hành vi và thuộc
tính (property) dưới dạng những biến handle giải
quyết mọi cơng việc thơng dụng trong chương
trình Windows
GV: Nguyễn Thị Mai Trang 34
Thư viện lập trình MFC
Cụ thể, MFC cung cấp một khuơn mẫu
ứng dụng (application framework) cho việc
lập trình trên Windows.
Framework này cung cấp hầu hết các mã
cần thiết cho việc quản lý cửa sổ, các trình
đơn, hộp hội thoại, thực hiện các thao tác
xuất nhập cơ bản, lưu trữ tập hợp các đối
tượng dữ liệu
GV: Nguyễn Thị Mai Trang 35
Thư viện lập trình MFC
Các tiện ích của thư viện lập trình MFC
– Cung cấp những đối tượng dễ dàng sử dụng
– MFC chứa đựng hầu hết các cấu trúc dữ liệu
quan trọng và các lời gọi hàm API (Application
Program Interface)
– Bao gồm các lớp đối tượng với sự gĩi gọn về
mã lệnh và dữ liệu trong một lớp và sự kế
thừa lớp.
– Cung cấp các hàm thư viện, các điều khiển,
các thơng điệp, đồ họa GDI, trình đơn và các
hộp hội thoạiV
GV: Nguyễn Thị Mai Trang 36
Thư viện lập trình MFC
Các lớp ứng dụng
– Các lớp ứng dụng chính trong MFC bao gồm
việc khởi tạo, chạy và chấm dứt ứng dụng
– Thư viện lập trình MFC cĩ hơn 200 lớp, chia
làm nhiều nhĩm thực hiện các cơng việc đặc
trưng như: quản lý ứng dụng, kiểu dữ liệu,
các ơ điều khiển, khung đối thoại, đồ họaV
GV: Nguyễn Thị Mai Trang 37
Thư viện lập trình MFC
GV: Nguyễn Thị Mai Trang 38
Thư viện lập trình MFC
GV: Nguyễn Thị Mai Trang 39
Thư viện lập trình MFC
Các lớp tiêu biểu
Lớp CButton
Lớp CColorDialog
Lớp CComboBox
Lớp CDaoDatabase
Lớp CDaoRecordset
Lớp CDaoTableDef
Lớp CDC
Lớp CDialog
Lớp CEdit
Lớp CFile
Lớp CFontDialog
Lớp CImageList
Lớp CListCtrl
GV: Nguyễn Thị Mai Trang 40
Thư viện lập trình MFC
Các lớp tiêu biểu (tt)
Lớp CMDIChildWnd
Lớp CMDIFrameWnd
Lớp CMenu
Lớp CPropertyPage
Lớp CPropertySheet
Lớp CPtrList
Lớp CRichEditCtrl
Lớp CSpinButtonCtrl
Lớp CStatic
Lớp CTypedPtrList
Lớp CToolBar
Lớp CTabCtrl
Lớp CTreeCtrl
Lớp CWinApp
GV: Nguyễn Thị Mai Trang 41
Thư viện lập trình MFC
Source code một chương trình MFC
GV: Nguyễn Thị Mai Trang 42
Thư viện lập trình MFC
GV: Nguyễn Thị Mai Trang 43
Thư viện lập trình MFC
GV: Nguyễn Thị Mai Trang 44
Thư viện lập trình MFC
Kết quả hiển thị
GV: Nguyễn Thị Mai Trang 45
Bài 3: Visual C++ 6.0
Tạo Project mới: khởi động Visual C++, từ
menu File, chọn NewV
GV: Nguyễn Thị Mai Trang 46
Bài 3: Visual C++ 6.0
Chọn loại ứng dụng thích hợp, các bước
kế tiếp chọn tùy theo yêu cầu của ứng
dụng hoặc cĩ thể để mặc định
GV: Nguyễn Thị Mai Trang 47
Bài 3: Visual C++ 6.0
Cửa sổ làm việc
Workspace
Toolbox
GV: Nguyễn Thị Mai Trang 48
Bài 3: Visual C++ 6.0
Hình ảnh tổng thể
của project dưới
dạng các lớp
Những tập tin có
trong project
Những tài nguyên
có trong project
GV: Nguyễn Thị Mai Trang 49
Bài tập
Bài tập 1: viết chương trình tạo một cửa sổ
ứng dụng như sau:
GV: Nguyễn Thị Mai Trang 50
Bài tập
Hướng dẫn
GV: Nguyễn Thị Mai Trang 51
Bài tập
GV: Nguyễn Thị Mai Trang 52
Bài tập
GV: Nguyễn Thị Mai Trang 53
Bài tập
GV: Nguyễn Thị Mai Trang 54
Bài tập
GV: Nguyễn Thị Mai Trang 55
Bài tập
GV: Nguyễn Thị Mai Trang 56
Bài tập
Các giá trị của m_nCmdShow:
SW_SHOWNORMAL,
SW_SHOWMINIMIZED,
SW_SHOWMAXIMIZED
GV: Nguyễn Thị Mai Trang 57
Bài tập
GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 2
Thiết bị ngữ cảnh
và các phương
pháp vẽ
GV: Nguyễn Thị Mai Trang 2
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Mục tiêu
Giới thiệu giao diện thiết bị đồ họa GDI,
một cơng cụ rất quan trọng để vẽ các đối
tượng hình học, hình ảnh và văn bản.
Giới thiệu một số hàm trong thư viện đồ
họa GDI để vận dụng vào việc lập trình.
Qua chương này, sinh viên cĩ thể xây
dựng được các ứng dụng xuất văn bản,
hình ảnh và vẽ được một số đối tượng
theo yêu cầu.
GV: Nguyễn Thị Mai Trang 3
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Nội dung
Thiết bị ngữ cảnh
Các phương pháp vẽ
Font và văn bản
Sử dụng Memory Device Context
Hiển thị hình ảnh
Một số lớp, cấu trúc dữ liệu giao diên đồ
họa
GV: Nguyễn Thị Mai Trang 4
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bài 1: Thiết bị ngữ cảnh
Giới thiệu giao diện thiết bị đồ họa (GDI)
Hệ thống tọa độ
Các đối tượng thiết bị ngữ cảnh
GV: Nguyễn Thị Mai Trang 5
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Giới thiệu giao diện thiết bị đồ họa
GDI là ththư viện cung cấp các hàm và
các cấu trúc dữ liệu cần thiết để ứng dụng
tạo ra những kết xuất dưới dạng đồ họa
(hiển thị lên màn hình, in ra máy in,U)
Các hàm GDI cho phép vẽ đường thẳng,
đường cong, các hình đa giác, xuất ký tự,
hiển thị ảnh bitmap, in ấn,U
GDI khơng tương tác trực tiếp với thiết bị
phần cứng, mà thơng qua các trình điều
khiển thiết bị.
GV: Nguyễn Thị Mai Trang 6
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Giới thiệu giao diện thiết bị đồ họa
Các thiết bị đồ họa (Graphics device): Là
những thiết bị cho phép thể hiện các kết
xuất dạng đồ họa trên đĩU
– Thiết bị vật lý (physical device): là những thiết
bị thật như màn hình, cửa sổ, máy in,U
– Thiết bị “ảo” (logical device): là các thiết bị
được giả lập trong bộ nhớ, cịn gọi là
“memory device”, cĩ tác dụng mơ phỏng thiết
bị vật lý
GV: Nguyễn Thị Mai Trang 7
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Hệ thống tọa độ
GV: Nguyễn Thị Mai Trang 8
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Hệ thống tọa độ (tt)
Hệ thống tọa độ mặc định là MM_TEXT
Muốn sử dụng một hệ thống tọa độ khác,
gọi hàm CDC::SetMapMode
Ví dụ:
GV: Nguyễn Thị Mai Trang 9
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các đối tượng thiết bị ngữ cảnh
Bút vẽ (pen) : để vẽ các đường thẳng và
hình dáng
Chổi vẽ (brush): để tơ các vùng của hình
vẽ trên màn hình
Kiểu chữ (font) : hiển thị văn bản
Màu (colors).
GV: Nguyễn Thị Mai Trang 10
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thuộc tính của thiết bị ngữ cảnh
GV: Nguyễn Thị Mai Trang 11
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các lớp thiết bị ngữ cảnh
GV: Nguyễn Thị Mai Trang 12
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các lớp thiết bị ngữ cảnh
CPaintDC: Vẽ trong vùng client của cửa
sổ, đáp ứng với sự kiện WM_PAINT, dùng
trong hàm OnPaint()
CClientDC: tạo ra một ngữ cảnh thiết bị vẽ
trong vùng client của cửa số, cĩ thể sử
dụng ngồi hàm OnPaint().
CWindowDC: Vẽ trên cửa sổ, kể cả vùng
client và non-client
CMetaFileDC: Vẽ một GDI metafile
GV: Nguyễn Thị Mai Trang 13
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bài 2: Các phương pháp vẽ
Quy trình vẽ
Tạo và sử dụng các đối tượng thiết bị ngữ
cảnh
Các thao tác vẽ cơ bản
GV: Nguyễn Thị Mai Trang 14
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Quy trình vẽ
Mượn DC (Device Context)
Thực hiện các thao tác vẽ
Trả lại DC cho Windows
Các hàm mượn và trả DC thơng dụng:
– BeginPaint và EndPaint
– GetDC và ReleaseDC
GV: Nguyễn Thị Mai Trang 15
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Quy trình vẽ (tt)
GV: Nguyễn Thị Mai Trang 16
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Quy trình vẽ (tt)
Ngồi ra, cĩ thể sử dụng đối tượng thuộc
các lớp thiết bị ngữ cảnh theo hai cách:
– Khai báo đối tượng, sử dụng phương thức
thiết lập của lớp (khơng cần hủy đối tượng)
– Tạo một đối tượng của lớp thiết bị ngữ cảnh
(phải hủy sau khi sử dụng)
GV: Nguyễn Thị Mai Trang 17
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo một đối tượng thiết bị ngữ cảnh
Các lớp đối tượng thiết bị ngữ cảnh dùng để vẽ
bao gồm:
– CPen: cơng cụ vẽ điểm hoặc đường thẳng
– CBrush: cơng cụ tơ màu
– CFont: cơng cụ tạo phơng chữ
GV: Nguyễn Thị Mai Trang 18
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Pen (bút vẽ)
Tạo bút vẽ
GV: Nguyễn Thị Mai Trang 19
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Pen (bút vẽ)
Một số nét vẽ
GV: Nguyễn Thị Mai Trang 20
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bảng màu
GV: Nguyễn Thị Mai Trang 21
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bảng màu
GV: Nguyễn Thị Mai Trang 22
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Brush (Cọ tơ màu)
Tạo một cọ tơ màu
GV: Nguyễn Thị Mai Trang 23
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Brush (Cọ tơ màu)
Tạo một cọ tơ màu
GV: Nguyễn Thị Mai Trang 24
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Brush (Cọ tơ màu)
Một số kiểu HatchBrush
GV: Nguyễn Thị Mai Trang 25
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo một đối tượng thiết bị ngữ cảnh
Chọn đối tượng thiết bị ngữ cảnh
– Sử dụng hàm SelectObject để chọn một đối
tượng thiết bị ngữ cảnh
– Các đối tượng cĩ thể được chọn với
SelectObject
• Pens
• Brushes
• Fonts
• Bitmaps
• Palettes
• Regions
GV: Nguyễn Thị Mai Trang 26
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo một đối tượng thiết bị ngữ cảnh
Chọn đối tượng thiết bị ngữ cảnh (tt)
– Sử dụng hàm SelectStockObject để chọn một
đối tượng thiết bị ngữ cảnh chuẩn
–
GV: Nguyễn Thị Mai Trang 27
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số đối tượng GDI chuẩn
GV: Nguyễn Thị Mai Trang 28
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Vẽ điểm, đường thẳng, đường cong
– SetPixel: vẽ một điểm
– MoveTo: Đặt vị trí hiện hành trước khi vẽ.
– LineTo : vẽ đoạn thẳng từ vị trí hiện tại đến điểm cuối
đoạn thẳng
– Polyline : Vẽ đường thẳng gấp khúc
– PolylineTo: Vẽ đoạn thẳng và đặt vị trí hiện hành tại
cuối đoạn thẳng vừa vẽ.
– Arc : Vẽ một cung
– ArcTo : Vẽ một cung và đặt vị trí hiện hành tại điểm
cuối cung vừa vẽ.
– PolyBezier: Vẽ một hoặc nhiều đường cong bất kỳ.
– PolyBezierTo: Vẽ đường cong và đặt vị trí hiện hành
tại cuối đường cong vừa vẽ.
GV: Nguyễn Thị Mai Trang 29
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
PolyBezier
GV: Nguyễn Thị Mai Trang 30
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Arcs
GV: Nguyễn Thị Mai Trang 31
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Arcs
– Mặc định, một cung được vẽ ngược chiều kim
đồng hồ.
– Để thay đổi chiều vẽ cung, sử dụng hàm:
int SetArcDirection(int nArcDirection);
GV: Nguyễn Thị Mai Trang 32
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 33
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 34
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Vẽ các đối tượng hình học
– Chord
– Pie
– Ellipse
– Rectangle
– RoundRect
GV: Nguyễn Thị Mai Trang 35
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Ellipse và Circle
GV: Nguyễn Thị Mai Trang 36
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Round Rectangles và Round Squares
GV: Nguyễn Thị Mai Trang 37
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Pies
GV: Nguyễn Thị Mai Trang 38
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Pies
GV: Nguyễn Thị Mai Trang 39
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 40
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 41
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 42
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Một số ví dụ
GV: Nguyễn Thị Mai Trang 43
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các thao tác vẽ cơ bản
Kết quả
GV: Nguyễn Thị Mai Trang 44
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bài 3: Font và văn bản
Giới thiệu một số hàm vẽ văn bản
Font chữ:
– Các hàm tạo font chữ
– Sử dụng font
Một số ví dụ
GV: Nguyễn Thị Mai Trang 45
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số hàm vẽ văn bản
DrawText
TextOut
GetTextMetrics
SetTextAlign
SetTextJustification
SetTextColor
SetBkColor
GV: Nguyễn Thị Mai Trang 46
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Các hàm tạo font chữ
– CreateFont
– CreateFontIndirect
– CreatePointFont
– CreatePointFontIndirect
GV: Nguyễn Thị Mai Trang 47
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreateFont
Chiều cao, rộng
Gĩc giữa hai ký tự
Phương và chiều
Kiểu in đậm, nghiêng, gạch
dưới, gạch ngang thân chữ
Tên font chữ
GV: Nguyễn Thị Mai Trang 48
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreateFont
Ví dụ
GV: Nguyễn Thị Mai Trang 49
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreatePointFont
Ví dụ
GV: Nguyễn Thị Mai Trang 50
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Cấu trúc LOGFONT
GV: Nguyễn Thị Mai Trang 51
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreatePointFontIndirect
Tạo font chữ với cấu trúc LOGFONT
GV: Nguyễn Thị Mai Trang 52
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreatePointFontIndirect
Ví dụ
GV: Nguyễn Thị Mai Trang 53
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreateFontIndirect
– Tạo font chữ với cấu trúc LOGFONT
GV: Nguyễn Thị Mai Trang 54
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CFont::CreateFontIndirect
Ví dụ
GV: Nguyễn Thị Mai Trang 55
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số ví dụ
GV: Nguyễn Thị Mai Trang 56
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số ví dụ
– Kết quả hiển thị
GV: Nguyễn Thị Mai Trang 57
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số ví dụ
GV: Nguyễn Thị Mai Trang 58
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số ví dụ
– Kết quả hiển thị
GV: Nguyễn Thị Mai Trang 59
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bài 4: Sử dụng Memory Device Context
Khái niệm về Memory Device Context
(MDC)
Tạo và sử dụng MDC
GV: Nguyễn Thị Mai Trang 60
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Memory Device Context (MDC)
Nếu thực hiện nhiều thao tác vẽ trực tiếp
trên thiết bị ngữ cảnh của màn hình →
màn hình bị giật → Khắc phục: sử dụng
MDC (cịn gọi là thiết bị ngữ cảnh ảo).
Memory device context (MDC) là một thiết
bị ảo khơng gắn với một thiết bị xuất cụ
thể nào. MDC được sử dụng như một thiết
bị ngữ cảnh trung gian để vẽ trước khi
xuất ra màn hình.
GV: Nguyễn Thị Mai Trang 61
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo và sử dụng MDC
– Tạo ra một thiết bị ngữ cảnh ảo (MDC) trong
bộ nhớ tương thích với thiết bị ngữ cảnh thật,
sử dụng hàm CreateCompatibleDC
– Bề mặt hiển thị ban đầu của MDC rất nhỏ, chỉ
là một pixel. Do đĩ, cần chọn một đối tượng
bitmap GDI vào MDC.
– Thực hiện các thao tác vẽ trên MDC này
– Chép nội dung của MDC vào DC thật.
– Hủy MDC
GV: Nguyễn Thị Mai Trang 62
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo và sử dụng MDC
GV: Nguyễn Thị Mai Trang 63
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Tạo và sử dụng MDC
GV: Nguyễn Thị Mai Trang 64
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Bài 5: Hiển thị hình ảnh
Sử dụng bitmap từ tài nguyên
Load bitmap từ file
Sao chép bitmap
Hiển thị bitmap
GV: Nguyễn Thị Mai Trang 65
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sử dụng bitmap từ tài nguyên
Import ảnh bitmap vào Resource
– Vào Resource View, chọn Import.
– Nếu ảnh bitmap nhiều hơn 256 màu thì khơng
thể xem hay sửa đổi trong Resource View của
Visual C++.
Load ảnh bitmap từ Resource
– Sử dụng hàm LoadBitmap của lớp CBitmap
để load ảnh bitmap trong resource.
– Hủy đối tượng bitmap sau khi sử dụng bằng
hàm DeleteObject.
GV: Nguyễn Thị Mai Trang 66
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sử dụng bitmap từ tài nguyên
Ví dụ:
GV: Nguyễn Thị Mai Trang 67
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Load bitmap từ file
Sử dụng hàm LoadImage
GV: Nguyễn Thị Mai Trang 68
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
Hàm CDC::BitBlt: chép nội dung bitmap từ
DC nguồn sang DC đích.
–
– x, y: gĩc trái trên của vùng DC đích
– nWidth, nHeight: kích thước vùng DC đích
– pSrcDC: con trỏ đến DC nguồn
– xSrc, yScr: gĩc trái trên của vùng ảnh được chép
trong DC nguồn
– dwRop: chế độ chép ảnh
GV: Nguyễn Thị Mai Trang 69
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
Chế độ chép ảnh
GV: Nguyễn Thị Mai Trang 70
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
Chế độ chép ảnh
GV: Nguyễn Thị Mai Trang 71
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
GV: Nguyễn Thị Mai Trang 72
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
Hàm CDC:: StrechBlt giống như hàm
BitBlt, cho phép phĩng to hay thu nhỏ ảnh
- nSrcWidth, nSrcHeight: kích thước vùng DC
nguồn
GV: Nguyễn Thị Mai Trang 73
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Sao chép bitmap
Ví dụ
GV: Nguyễn Thị Mai Trang 74
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số lớp, cấu trúc dữ liệu giao diên đồ họa
CPoint: Lớp đối tượng điểm – tương ứng
cấu trúc POINT
CRect: Lớp đối tượng hình chữ nhật– tương
ứng cấu trúc RECT
GV: Nguyễn Thị Mai Trang 75
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CSize: Lớp đối tượng kích thước - tương ứng
cấu trúc SIZE
CRgn: Lớp đối tượng quản lý region – một vùng
ảnh cĩ hình dạng bất kỳ - tương ứng cấu trúc
HRGN
Một số lớp, cấu trúc dữ liệu giao diên đồ họa
GV: Nguyễn Thị Mai Trang 76
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CBrush: Lớp đối tượng quản lý brush – cơng cụ
tơ màu - tương ứng cấu trúc LOGBRUSH
CPen: Lớp đối tượng quản lý pen – cơng cụ vẽ
nét - tương ứng cấu trúc LOGPEN
Một số lớp, cấu trúc dữ liệu giao diên đồ họa
GV: Nguyễn Thị Mai Trang 77
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
CBitmap: Lớp đối tượng quản lý bitmap -
tương ứng cấu trúc BITMAP
Một số lớp, cấu trúc dữ liệu giao diên đồ họa
GV: Nguyễn Thị Mai Trang 78
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số hàm thuộc lớp CDC
CreateCompatibleDC( CDC* pDC ); Tạo đối tượng DC
tương thích với một DC cĩ sẵn (pDC)
DeleteDC( ); Hủy bỏ đối tượng DC.
SetBkColor( COLORREF crColor ); Ðặt màu nền cho
DC.
GetBkColor( ); Trả về giá trị màu nền của DC.
SetTextColor( COLORREF crColor ); Ấn định màu hiển
thị các nội dung văn bản trên DC.
GetTextColor( ); Trả về giá trị màu đang dùng của văn
bản trên DC.
FloodFill ( int x, int y, COLORREF crColor ); Tơ màu một
vùng khép kín bởi biên màu crColor bao quanh điểm
(x,y) bởi chổi tơ (brush) hiện hành
GV: Nguyễn Thị Mai Trang 79
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số hàm thuộc lớp CDC
SetBkMode ( int nBkMode ); Ấn định chế độ hiển thị nền
văn bản
– TRANSPARENT : Nền chữ hiển thị trong suốt.
– OPAQUE : Chữ hiển thị cĩ màu nền.
GetBkMode( ); Lấy chế độ hiển thị văn bản của DC
TextOut ( intx, y , LPCTSTRlpszString, intnCount ); Hiển
thị nội dung chuỗi văn bản lên giao diện đồ họa của DC.
DrawText ( LPCTSTRlpszString, intnCount,
LPRECTlpRect, UINT nFormat); In nội dung chuỗi lên
giao diện đồ họa của DC cĩ canh lề
GV: Nguyễn Thị Mai Trang 80
Lập trình Windows – Thiết bị ngữ cảnh và các phương pháp vẽ
Một số hàm thuộc lớp CDC
FillRect ( LPCRECT lpRect, CBrush*pBrush); Tơ màu
vùng hình chữ nhật
Draw3dRect ( LPCRECTlpRect, COLORREF
clrTopLeft, COLORREF clrBottomRight); Vẽ hình chữ
nhật 3 chiều
DrawEdge ( LPRECTlpRect, UINT nEdge, /*Cách vẽ
trên các gờ (trong, ngồi) cạnh*/,UINTnFlags /* Các
cạnh được vẽ*/); Vẽ khung chữ nhật với hiệu ứng 3
chiều.
DrawState ( CPoint point,CSize size, CBitmap*pBitmap,
UINT nFlags, CBrush*pBrush); Vẽ bitmap hoặc icon
DrawIcon ( intx, int y, HICON hIcon); ); Vẽ icon hIcon
lên DC
GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 3
Các sự kiện - Xử
lý sự kiện trong
Windows
GV: Nguyễn Thị Mai Trang 2
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mục tiêu
Giới thiệu những sự kiện xảy ra trên
Windows
– Sự kiện chuột, bàn phím
– Các sự kiện khác
Nắm bắt và xử lý những sự kiện gởi nhận
trên Windows.
Qua chương này, sinh viên cĩ thể viết
chương trình xử lý những sự kiện xảy ra
trên cửa sổ ứng dụng.
GV: Nguyễn Thị Mai Trang 3
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Nội dung
Các sự kiện về chuột (mouse)
Các sự kiện về bàn phím (Keyboard)
Các sự kiện khác
GV: Nguyễn Thị Mai Trang 4
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 1: Các sự kiện về chuột (mouse)
Sự kiện chuột trong vùng client
Sự kiện chuột ngồi vùng client (non-
client)
Thay đổi con trỏ chuột
GV: Nguyễn Thị Mai Trang 5
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột trong vùng client
Các thơng điệp sự kiện chuột
– WM_LBUTTONDOWN: Nút trái chuột được nhấn.
– WM_LBUTTONUP: Nút trái chuột được nhả.
– WM_LBUTTONDBLCLK: Nút trái chuột được nhấn
đúp.
– WM_MBUTTONDOWN: Nút giữa chuột được nhấn.
– WM_MBUTTONUP: Nút giữa chuột được nhả.
– WM_MBUTTONDBLCLK: Nút giữa chuột được nhấn
đúp.
GV: Nguyễn Thị Mai Trang 6
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột trong vùng client
Các thơng điệp sự kiện chuột (tt)
– WM_RBUTTONDOWN: Nút chuột phải được nhấn.
– WM_RBUTTONUP: Nút chuột phải được nhả
– WM_RBUTTONDBLCLK: Nút chuột phải được
nhấn đúp.
– WM_MOUSEMOVE: Di chuyển chuột trên cửa sổ
ứng dụng
GV: Nguyễn Thị Mai Trang 7
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm xử lý sự kiện chuột
ON_WM_LBUTTONDOWN OnLButtonDown
ON_WM_LBUTTONUP OnLButtonUp
ON_WM_LBUTTONDBLCLK OnLButtonDblClk
ON_WM_MBUTTONDOWN OnMButtonDown
ON_WM_MBUTTONUP OnMButtonUp
ON_WM_MBUTTONDBLCLK OnMButtonDblClk
ON_WM_RBUTTONDOWN OnRButtonDown
ON_WM_RBUTTONUP OnRButtonUp
ON_WM_RBUTTONDBLCLK OnRButtonDblClk
ON_WM_MOUSEMOVE OnMouseMove
GV: Nguyễn Thị Mai Trang 8
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Khai báo hàm cho các handler
nFlags: là tham số chỉ rõ trạng thái nút chuột và
phím Shift , Ctrl được nhấn lúc sự kiện được
phát sinh
– MK_LBUTTON : Nút trái chuột được nhấn
– MK_MBUTTON: Nút giữa chuột được nhấn
– MK_RBUTTON: Nút phải chuột được nhấn.
– MK_CONTROL: Phím Ctrl được nhấn
– MK_SHIFT: Phím Shift được nhấn
GV: Nguyễn Thị Mai Trang 9
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Ví dụ
GV: Nguyễn Thị Mai Trang 10
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột ngồi vùng client (non-client)
Các thơng điệp sự kiện chuột vùng Non-
Client
– WM_NCLBUTTONDOWN: Nút trái chuột được nhấn.
– WM_NCLBUTTONUP: Nút trái chuột được nhả.
– WM_NCLBUTTONDBLCLK: Nút trái chuột được nhấn đúp.
– WM_NCMBUTTONDOWN: Nút giữa chuột được nhấn.
– WM_NCMBUTTONUP: Nút giữa chuột được nhả.
– WM_NCMBUTTONDBLCLK: Nút giữa chuột được nhấn đúp.
– WM_NCRBUTTONDOWN: Nút chuột phải được nhấn.
– WM_NCRBUTTONUP: Nút chuột phải được nhả
– WM_NCRBUTTONDBLCLK: Nút chuột phải được nhấn đúp.
– WM_NCMOUSEMOVE: Di chuyển chuột trên cửa sổ ứng dụng
GV: Nguyễn Thị Mai Trang 11
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột ngồi vùng client (non-client)
Khai báo hàm cho các handler
GV: Nguyễn Thị Mai Trang 12
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột ngồi vùng client (non-client)
Một số giá trị của tham số nHitTest
– HTCAPTION The title bar
– HTCLOSE The close button
– HTGROWBOX The restore button (same as HTSIZE)
– HTHSCROLL The window's horizontal scroll bar
– HTMENU The menu bar
– HTREDUCE The minimize button
– HTSIZE The restore button (same as HTGROWBOX)
– HTSYSMENU The system menu box
– HTVSCROLL The window's vertical scroll bar
– HTZOOM The maximize button
GV: Nguyễn Thị Mai Trang 13
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sự kiện chuột ngồi vùng client (non-client)
Thơng điệp WM_NCHITTEST
– Khi một cửa sổ nhận một thơng điệp từ chuột, nĩ nhận thơng
điệp WM_NCHITTEST
– Thơng điệp này cho biết vùng nào trên cửa sổ xảy ra sự kiện
chuột
– Để biết được vùng nào xảy ra sự kiện chuột, ta khai báo như
sau:
GV: Nguyễn Thị Mai Trang 14
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số thơng điệp khác từ chuột
Khi một con trỏ di chuyển trên cửa sổ, cửa
sổ sẽ nhận được thơng điệp
WM_MOUSEMOVE
Khi con trỏ rời khỏi cửa sổ, cửa sổ sẽ
nhận được thơng điệp
WM_MOUSELEAVE
Khi con trỏ cịn nằm trên cửa sổ, cửa sổ
sẽ nhận được thơng điệp
WM_MOUSEHOVER
GV: Nguyễn Thị Mai Trang 15
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Thay đổi con trỏ chuột
Để thay đổi con trỏ chuột, dùng hàm
CWnd::SetCursor
Để load con trỏ chuột, dùng hàm
CWnd::LoadCursor
GV: Nguyễn Thị Mai Trang 16
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số dạng con trỏ chuẩn
GV: Nguyễn Thị Mai Trang 17
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 2: Các sự kiện về bàn phím
Các thơng điệp sự kiện từ bàn phím
Các hàm xử lý sự kiện bàn phím
GV: Nguyễn Thị Mai Trang 18
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các thơng điệp sự kiện từ bàn phím
WM_KEYDOWN: Phím được nhấn.
WM_KEYUP: Phím được nhả
WM_SYSKEYDOWN: phím hệ thống (Alt,
F10) được nhấn
WM_SYSKEYUP: phím hệ thống (Alt,
F10) được nhả
GV: Nguyễn Thị Mai Trang 19
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Khai báo hàm cho các handler
– nChar: mã ký tự được nhấn
– nRepCnt: số lần nhấn phím
– nFlags: tổ hợp cờ xác định xem cĩ phải phím
Alt được nhấn cùng với phím khác khơng?
GV: Nguyễn Thị Mai Trang 20
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Virtual Key Codes
GV: Nguyễn Thị Mai Trang 21
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Virtual Key Codes
GV: Nguyễn Thị Mai Trang 22
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Virtual Key Codes
GV: Nguyễn Thị Mai Trang 23
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Virtual Key Codes
GV: Nguyễn Thị Mai Trang 24
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm xử lý sự kiện bàn phím
GetKeyState
OnKeyDown
OnChar
PreTranslateMessage
u
GV: Nguyễn Thị Mai Trang 25
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm GetKeyState
Kiểm tra trạng thái các phím chức năng như
Shift, Control, Alt,u
– ::GetKeyState (VK_SHIFT) trả về giá trị <0 khi phím
Shift được nhấn
– ::GetKeyState (VK_CONTROL ) trả về giá trị <0 khi
phím Ctrl được nhấn
– ::GetKeyState (VK_MENU ) trả về giá trị <0 khi phím
Alt được nhấn
– ::GetKeyState (VK_NUMLOCK)
– ::GetKeyState (VK_CAPITAL )
– ::GetKeyState (VK_SCROLL )
Trả về giá trị khác 0 nếu phím Num Lock, Caps Lock
hoặc Scroll Lock được nhấn
GV: Nguyễn Thị Mai Trang 26
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm GetKeyState
Ví dụ:
GV: Nguyễn Thị Mai Trang 27
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm OnKeydown
Đáp ứng thơng điệp WM_KEYDOWN, khi người
dùng nhấn một phím khơng phải là phím hệ
thống
GV: Nguyễn Thị Mai Trang 28
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm OnChar
Đáp ứng thơng điệp WM_CHAR, khi thơng
điệp WM_KEYDOWN đã được dịch từ
hàm TranslateMessage. Thơng điệp
WM_CHAR cĩ chứa mã kí tự của phím
được nhấn
GV: Nguyễn Thị Mai Trang 29
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm OnChar
Ví dụ
GV: Nguyễn Thị Mai Trang 30
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hàm PreTranslateMessage
Chuyển dịch thơng báo trước khi thơng
báo được gởi đến
GV: Nguyễn Thị Mai Trang 31
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 3: Các sự kiện khác
WM_TIMER
WM_HSCROLL
WM_VSCROLL
WM_CTLCOLOR
WM_DRAWITEM
WM_MEASUREITEM
WM_DELETEITEM
WM_CHARTOITEM
WM_VKEYTOITEM
WM_COMPAREITEM
u
GV: Nguyễn Thị Mai Trang 32
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
WM_TIMER
Được gởi đến hàng đợi messages để gọi
hàmTimerProc sau mỗi khoảng thời gian
được chỉ định trong hàm SetTimer
Hàm SetTimer: dùng để cài đặt một bộ
định giờ
GV: Nguyễn Thị Mai Trang 33
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
WM_TIMER
– nIDEvent :giá trị khác 0 để nhận dạng Timer
– nElapse: khoảng thời gian gian nghỉ giữa hai
lần gởi thơng điệp tính bằng mili giây
– void (CALLBACK EXPORT* lpfnTimer)
( HWND, UINT, UINT, DWORD) )
• Hàm API xử lý sự kiện WM_TIMER. nếu chúng ta
khai báo là NULL thì Windows sẽ gởi thơng điệp
WM_TIMER vào hàng đợi thơng điệp của cửa sổ
tương ứng.
GV: Nguyễn Thị Mai Trang 34
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
WM_TIMER
Hàm TimerProc
– hwnd: Handle đến cửa sổ kết hợp với timer
– uMsg: WM_TIMER
– idEvent: giá trị nhận dạng Timer
– dwTime: thời gian hệ thống hoạt động, là giá
trị trả về của hàm GetTickCount
– Hàm KillTimer : hủy Timer
GV: Nguyễn Thị Mai Trang 35
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
WM_TIMER
Ví dụ về cách sử dụng Timer
GV: Nguyễn Thị Mai Trang 36
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm gởi, nhận thơng điệp sự kiện
GetMessage(): Lấy thơng báo ra khỏi
hàng đợi
PreTranslateMessage(): chuyển dịch
thơng báo trước khi thơng báo được gởi
đến
TranslateMessage(): chuyển virtual-key
messages sang character messages.
DispatchMessage(), SendMessage(): gởi
thơng báo
GV: Nguyễn Thị Mai Trang 37
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo các thơng báo cửa sổ riêng
Cĩ trên 70 thơng báo cửa sổ do hệ thống
định nghĩa từ WM_NULL đến WM_USER
Cĩ thể định nghĩa các thơng báo riêng như
sau:
– #define WM_MYMSG1 WM_USER + 1
– Cĩ thể gởi các thơng báo này như các thơng
báo cửa sổ bình thường:
SendMessage(WM_MYMSG1, wParam,
lParam);
GV: Nguyễn Thị Mai Trang 38
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo các thơng báo cửa sổ riêng
Khai báo trong sơ đồ thơng báo:
ON_MESSAGE(WM_MYMSG1,
OnProcessMsg1)
Hàm xử lý
LRESULT CMyProgram::OnProcessMsg1(
WPARAM wParam, LPARAM lParam)
{
//To do u
}
GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 4
Truy xuất, quản lý
hệ thống File và
thư mục
GV: Nguyễn Thị Mai Trang 2
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mục tiêu
Giới thiệu cách tổ chức hệ thống file và
thư mục trong Windows.
Tạo và lưu các đối tượng do người sử
dụng định nghĩa
Qua chương này, sinh viên cĩ thể nắm
vững kỹ năng thao tác với file và thư mục.
GV: Nguyễn Thị Mai Trang 3
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Nơi dung
File và thư mục
Serialization và lớp CArchive
GV: Nguyễn Thị Mai Trang 4
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 1: File và thư mục
Các hàm thuộc lớp CFile
Các thao tác với file và thư mục
Xử lý ngoại lệ
GV: Nguyễn Thị Mai Trang 5
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm thuộc lớp CFile
GetPathFile: Cho kết quả là chuỗi đường
dẫn và tên đầy đủ của một file
GetFileName: Cho kết quả là chuỗi tên
đầy đủ của một file.
GetFileTitle: Cho kết quả là chuỗi tên file
khơng cĩ phần mở rộng.
GV: Nguyễn Thị Mai Trang 6
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm thuộc lớp CFile
Ví dụ
GV: Nguyễn Thị Mai Trang 7
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các thao tác với file và thư mục
Mở file
Đĩng file
Đọc và ghi file
Di chuyển trong file
Đổi tên file
Xĩa file
Xử lý ngoại lệ
Liệt kê file và thư mục
GV: Nguyễn Thị Mai Trang 8
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mở file
Cĩ 2 cách mở file
– Cách 1: Sử dụng hàm CFile::Open
• lpszFileName: tên file
• nOpenFlags: chế độ mở file
• pError: đối tượng lớp CFileException chứa
thơng tin ngoại lệ
GV: Nguyễn Thị Mai Trang 9
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mở file
– Sử dụng hàm CFile::Open (tt)
GV: Nguyễn Thị Mai Trang 10
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mở file
Cách 2: Sử dụng phương thức thiết lập
của lớp CFile
GV: Nguyễn Thị Mai Trang 11
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mở và tạo file mới
– Với cách này, file mới sẽ ghi đè lên file đã cĩ
– Nếu file chưa tồn tại -> tạo mới
– Nếu file đã tồn tại, mở nhưng khơng ghi đè.
GV: Nguyễn Thị Mai Trang 12
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các mức truy cập file
Cĩ thể cho phép hoặc hạn chế quyền truy
cập file
Cĩ thể chỉ định cho phép đọc / ghi file
GV: Nguyễn Thị Mai Trang 13
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Đĩng file
CFile::Close() (ví dụ: fileName.Close();)
CFile:: ~ CFile
GV: Nguyễn Thị Mai Trang 14
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Đọc và ghi file
Ví dụ 1:
GV: Nguyễn Thị Mai Trang 15
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Đọc và ghi file
Ví dụ 2:
GV: Nguyễn Thị Mai Trang 16
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm di chuyển trong file
Seek(LONG lOff, UINT nFrom)
– lOff: số bytes
– nFrom:
– CFile::begin : vị trí từ đầu file
– CFile::current: vị trí con trỏ hiện tại của file
– CFile::end : vị trí từ cuối file.
SeekTobegin(): di chuyển nhanh về đầu
file.
SeekToEnd(): di chuyển nhanh về cuối
file.
GV: Nguyễn Thị Mai Trang 17
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Đổi tên file, xĩa file
Đổi tên file
– CFile::Rename ( pOldName,pNewName);
• pOldName: tên file cũ
• pNewName: tên mới của file
Xĩa file
– CFile::Remove (pFileName);
GV: Nguyễn Thị Mai Trang 18
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Xử lý ngoại lệ với lớp CFileException
Khi thao tác truy cập file, sẽ cĩ trường hợp
phát sinh lỗi
Cĩ thể dùng biến thành phần m_cause
của lớp CFileException để dị lỗi
Các mã CFileException m_cause:
Khơng cĩ lỗi
Khơng cĩ mã lỗi xác định
Nhiều file mở đồng thời
Khơng tìm thấy file
Tên đường dẫn khơng hợp lệ
CFileException::none
CFileException::generic
CFileException::tooManyOpenFile
CFileException::fileNotFound
CFileException::badPath
GV: Nguyễn Thị Mai Trang 19
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Xử lý ngoại lệ với lớp CFileException
Cố sử dụng thẻ quản file khơng hợp
lệ
Thao tác tìm kiếm khơng thành cơng
Đã tới cuối file
Khơng đủ khơng gian đĩa
Xuất hiện lỗi phần cứng
Khơng được phép truy cập file
Thư mục quá nhiều file khơng thể
thêm nữa
Khơng thể xố thư mục hiện hành
Khơng thể khố vùng đã khố của file
Vùng dùng chung bị khố hoặc khơng
thể chia sẻ
CFileException::invalideFile
CFileException::badSeek
CFileException::endOfFile
CFileException::diskFull
CFileException::hardIO
CFileException::accessDenied
CFileException::directoryFull
CFileException::removeCurrent
Dir
CFileException::lockViolation
CFileException::sharingViolation
GV: Nguyễn Thị Mai Trang 20
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Liệt kê file và thư mục
Để cĩ thể đếm và tính tốn số files, ta
dùng hai hàm ::FindFirstFile và
::FindNextFile
GV: Nguyễn Thị Mai Trang 21
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tìm file
Sử dụng lớp CFileFind
GV: Nguyễn Thị Mai Trang 22
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tìm file
Sử dụng lớp CFileFind
GV: Nguyễn Thị Mai Trang 23
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 2: Serialization và lớp CArchive
Serialization
Lớp CArchive
GV: Nguyễn Thị Mai Trang 24
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization (chuỗi hĩa dữ liệu)
Chuỗi hố dữ liệu trong Visual C++ gồm
hai phần
– Dữ liệu ứng dụng được lưu trữ trên ổ đĩa hệ
thống dưới dạng file, gọi là chuỗi hố dữ liệu
– Khi trạng thái ứng dụng được phục hồi từ file
gọi là phi chuỗi hố dữ liệu
Sự kết hợp của hai phần này tạo nên
chuỗi hĩa các đối tượng ứng dụng trong
Visual C++.
GV: Nguyễn Thị Mai Trang 25
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization (tt)
Lớp CArchive và CFile
– Sự chuỗi hĩa dữ liệu được thực hiện thơng
qua lớp CArchive
– Lớp CArchive được thiết kế để hoạt động như
một luồng vào ra cho đối tượng CFile: cho
phép dữ liệu cĩ thể tới và đi từ file.
– Lớp CArchive luơn được kết hợp với lớp CFile
trong việc lưu trữ hoặc lấy dữ liệu từ file.
GV: Nguyễn Thị Mai Trang 26
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization(tt)
GV: Nguyễn Thị Mai Trang 27
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization(tt)
Kết hợp lớp CArchive và CFile để lưu dữ
liệu vào file và lấy dữ liệu ra từ file: dùng
tốn tử >
Ví dụ:
GV: Nguyễn Thị Mai Trang 28
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization
Cĩ thể sử dụng lớp CArchive đối với các kiểu dữ
liệu khác như: BYTE, WORD, LONG, DWORD,
float, double, int, unsigned int, short, char,x
Cả với các dữ liệu đặc biệt như: CString,
CTime, CTimeSpan, COleVariant,
COleCurrency, COleDateTime,
COleDateTimeSpan, CSize, CPoint, CRect.
Cĩ thể tự định nghĩa hàm Serialize, với lớp
CArchive để lưu trữ một kiểu dữ liệu riêng.
GV: Nguyễn Thị Mai Trang 29
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Serialization
Ví dụ: cĩ một mảng các đối tượng thuộc
lớp CLine (biến pLine), và biến nCount là
số phần tử trong mảng.
GV: Nguyễn Thị Mai Trang 30
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các bước chuỗi hĩa dữ liệu
Lớp phải kế thừa từ lớp CObject
Bổ sung marcro DECLARE_SERIAL trong
phần khai báo lớp. Marcro này cĩ một đối
số là tên lớp. Nĩ tự động thêm vào lớp
một số khai báo tốn tử và hàm chuẩn cần
cho việc chuỗi hố đối tượng.
Định nghĩa hàm Serialize
GV: Nguyễn Thị Mai Trang 31
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các bước chuỗi hĩa dữ liệu (tt)
Bổ sung marcro IMPLEMENT_SERIAL
vào phần thực thi của lớp. Marcro này đặt
bên ngồi các hàm lớp khác bởi nĩ bổ
sung mã cho các hàm lớp đã được khai
báo với marcro DECLARE_SERIAL.
Marcro này cĩ ba đối số là tên lớp, tên lớp
cơ sở và số hiệu phiên bản cĩ thể được
sử dụng để xác định file cĩ phải là phiên
bản đúng để đọc trong ứng dụng hay
khơng.
GV: Nguyễn Thị Mai Trang 32
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các bước chuỗi hĩa dữ liệu (tt)
Ví dụ
GV: Nguyễn Thị Mai Trang 33
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các bước chuỗi hĩa dữ liệu (tt)
GV: Nguyễn Thị Mai Trang 1
Lập trình Windows - Chương 5
Giao diện người
dùng kiểu đồ họa
GV: Nguyễn Thị Mai Trang 2
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Mục tiêu
Giới thiệu các loại giao diện của ứng dụng
trên windows
Cách thiết kế giao diện, sử dụng một cách
cĩ hiệu quả các đối tượng thiết kế trực
quan như menu, control, dialog@ để xây
dựng chương trình.
Qua chương này, sinh viên cĩ thể viết
chương trình đáp ứng được các yêu cầu
phức tạp và hiệu quả.
GV: Nguyễn Thị Mai Trang 3
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Nội dung
Bài 1: Menu
Bài 2: Giao diện Dialog và các Controls
Bài 3: Kiến trúc Document/View
Bài 4: Kết hợp các hộp thoại (Dialog,
Property Sheets)
GV: Nguyễn Thị Mai Trang 4
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 1: Menu
Thiết kế và sử dụng menu
Các chức năng nâng cao
GV: Nguyễn Thị Mai Trang 5
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Thiết kế và sử dụng menu
Tạo menu trong ứng dụng
Xử lý các sự kiện menu
GV: Nguyễn Thị Mai Trang 6
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo menu trong ứng dụng
Tạo menu từ nguồn tài nguyên của ứng
dụng và dùng phương thức LoadMenu
Dùng các hàm CreateMenu, LoadMenu,
và các hàm thuộc lớp CMenu
GV: Nguyễn Thị Mai Trang 7
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Cách tạo một Menu từ MFC AppWizard
GV: Nguyễn Thị Mai Trang 8
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Cách tạo một Menu từ MFC AppWizard
Mã lệnh phát sinh trong resouce file
GV: Nguyễn Thị Mai Trang 9
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Cách tạo một Menu từ MFC AppWizard
GV: Nguyễn Thị Mai Trang 10
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo và hiển thị menu
Sử dụng hàm CFrameWnd::Create
Sử dụng CFrameWnd::LoadFrame
GV: Nguyễn Thị Mai Trang 11
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo và hiển thị menu
Sử dụng CMenu:LoadMenu
GV: Nguyễn Thị Mai Trang 12
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Xử lý các sự kiện của Menu
Khi chọn một menu item, phát sinh sự kiện
WM_COMMAND.
Sự kiện này được xử lý trong hàm
ON_COMMAND.
Ví dụ:
– ON_COMMAND (ID_FILE_NEW, OnFileNew)
– ON_COMMAND (ID_FILE_OPEN, OnFileOpen)
– ON_COMMAND (ID_FILE_SAVE, OnFileSave)
– ON_COMMAND (ID_FILE_SAVE_AS, OnFileSaveAs)
– ON_COMMAND (ID_FILE_EXIT, OnFileExit)
GV: Nguyễn Thị Mai Trang 13
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Xử lý các sự kiện menu theo nhĩm
Sử dụng cho các menu cĩ chức năng
thực hiện một lệnh như nhau
Ví dụ
GV: Nguyễn Thị Mai Trang 14
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Cập nhật trạng thái menu item
Sử dụng hàm CheckMenuItem,
CheckMenuRadioItem
– Ví dụ
• CMenu* pMenu = GetMenu ();
• pMenu->CheckMenuItem (nID, MF_CHECKED);
• pMenu->CheckMenuItem(nID, MF_UNCHECKED);
–
GV: Nguyễn Thị Mai Trang 15
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các chức năng nâng cao
Tạo và thay đổi menu trong ứng dụng
Tạo menu riêng cho người dùng
Menu hiển thị bằng hình ảnh
Menu ngữ cảnh (Context menu hay Popup
menu)
Sử dụng các hàm thuộc lớp CMenu
GV: Nguyễn Thị Mai Trang 16
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm thuộc lớp CMenu
CMenu::CreateMenu Tạo menu
CMenu::CreatePopupMenu Tạo menu popup
CMenu::AppendMenu Nối thêm một mục menu
CMenu::GetMenu Lấy con trỏ menu chính
CMenu::GetSubMenu Lấy con trỏ menu con
CMenu::InsertMenu Chèn thêm 1 menu
CMenu::ModifyMenu Sửa đổi thuộc tính menu
CMenu::RemoveMenu Gỡ bỏ một mục menu
CMenu::GetMenuItemCount Trả về tổng số
mục menu
CMenu::TrackPopupMenu Hiển thị menu popup
GV: Nguyễn Thị Mai Trang 17
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
AppendMenu
Chức năng: nối thêm một mục vào cuối menu
– nFlags: Chỉ định trạng thái của menu mới thêm vào,
gồm các giá trị như: MF_ENABLED, MF_CHECKED,
MF_UNCHECKED, MF_DISABLED, MF_GRAYED
– nIDNewItem: id của menu mới thêm vào
– lpszNewItem: Chuỗi hiển thị trên menu mới thêm vào
– pBmp: con trỏ đến đối tượng CBitmap (hiển thị
bipmap trên menu)
GV: Nguyễn Thị Mai Trang 18
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
AppendMenu (tt)
Ví dụ
GV: Nguyễn Thị Mai Trang 19
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
InsertMenu
Chức năng: chèn thêm một mục
menu vào một vị trí xác định
GV: Nguyễn Thị Mai Trang 20
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
InsertMenu (tt)
– nPosition:
• ID menu đứng sau menu sẽ thêm vào, tương ứng
với nFlags là MF_BYCOMMAND
• Vị trí của menu sẽ thêm vào.tương ứng với nFlags
là MF_BYPOSITION
– nFlags: MF_BYCOMMAND,
MF_BYPOSITION
GV: Nguyễn Thị Mai Trang 21
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
InsertMenu (tt)
Ví dụ
GV: Nguyễn Thị Mai Trang 22
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
ModifyMenu
Chức năng: sửa đổi thuộc tính menu
GV: Nguyễn Thị Mai Trang 23
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
ModifyMenu (tt)
Ví dụ
GV: Nguyễn Thị Mai Trang 24
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
TrackPopupMenu
Chức năng: hiển thị menu popup
Ví dụ
GV: Nguyễn Thị Mai Trang 25
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
RemoveMenu
Chức năng: gỡ bỏ một mục menu
Ví dụ
GV: Nguyễn Thị Mai Trang 26
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 2: Giao diện Dialog và các Controls
Giới thiệu giao diện dạng dialog
The Classic Controls
Advanced Controls
Tham khảo một số controls khác
GV: Nguyễn Thị Mai Trang 27
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Giao diện dạng dialog
Tạo ứng dụng dạng dialog
Thiết kế một Dialog trong Visual C++
Xếp thứ tự các controls trên Dialog
Sắp xếp các controls trên Dialog
GV: Nguyễn Thị Mai Trang 28
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng dạng dialog
GV: Nguyễn Thị Mai Trang 29
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Thiết kế một Dialog trong Visual C++
Kéo các control trên thanh Toolbox
lên dialog
GV: Nguyễn Thị Mai Trang 30
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Thiết kế một Dialog trong Visual C++
Click chuột phải trên control, chọn
properties để thay đổi các thuộc tính
GV: Nguyễn Thị Mai Trang 31
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Xếp thứ tự các controls trên Dialog
Từ menu Layout, chọn TabOrder
(hoặc Ctrl+D)
GV: Nguyễn Thị Mai Trang 32
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sắp xếp các controls trên Dialog
GV: Nguyễn Thị Mai Trang 33
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Sắp xếp các controls trên Dialog
GV: Nguyễn Thị Mai Trang 34
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The Classic Controls
Button control
ListBox control
ComboBox control
Edit control
Static control
Scrolbar control
GV: Nguyễn Thị Mai Trang 35
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The Classic Controls
GV: Nguyễn Thị Mai Trang 36
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Có 4 loại button
Push Button
Check boxes
Radio buttons
Group boxes
The CButton Class
GV: Nguyễn Thị Mai Trang 37
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Button Styles
Style Description
BS_PUSHBUTTON Creates a standard push button control
BS_DEFPUSHBUTTON Creates a default push button; used
in dialog boxes to identify the push button that's clicked if Enter
is pressed
BS_CHECKBOX Creates a check box control
BS_AUTOCHECKBOX Creates a check box control that
checks and unchecks itself when clicked
BS_3STATE Creates a three-state check box control
BS_AUTO3STATE Creates a three - state check box control
that cycles through three states - checked, unchecked, and
indeterminate - when clicked
BS_RADIOBUTTON Creates a radio button control
BS_AUTORADIOBUTTON Creates a radio button control that,
when clicked, checks itself and unchecks other radio buttons in
the group
BS_GROUPBOX Creates a group box control
GV: Nguyễn Thị Mai Trang 38
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Canh lề văn bản trên button
Style Description
BS_LEFTTEXT Moves the text accompanying a radio button or
check box control from the button's right (the default) to its left
BS_RIGHTBUTTON Same as BS_LEFTTEXT
BS_LEFT Left justifies the button text in the control rectangle
BS_CENTER Centers the button text in the control rectangle
BS_RIGHT Right justifies the button text in the control
rectangle
BS_TOP Positions the button text at the top of the control
rectangle
BS_VCENTER Positions the button text in the center of the
control rectangle vertically
BS_BOTTOM Positions the button text at the bottom of the
control rectangle
BS_MULTILINE Allows text too long to fit on one line to be
broken into two or more lines
GV: Nguyễn Thị Mai Trang 39
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Canh lề văn bản trên button
GV: Nguyễn Thị Mai Trang 40
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Push Button
Là một control button được tạo với style là
BS_PUSHBUTTON
Khi được chọn, push button sẽ gởi đến
cửa sổ chính thơng báo BN_CLICKED
trong WM_COMMAND message.
Hàm xử lý
GV: Nguyễn Thị Mai Trang 41
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Check Boxes
Check Boxes là một control button được tạo với
style là BS_CHECKBOX,BS_AUTOCHECKBOX,
BS_3STATE hoặc BS_AUTO3STATE.
BS_CHECKBOX và BS_AUTOCHECKBOX cĩ
thể cĩ 2 trạng thái: chọn và khơng chọn.
Một check boxes được chọn hoặc khơng chọn
với hàm CButton:: SetCheck.
m_wndCheckBox.SetCheck (BST_CHECKED);
m_wndCheckBox.SetCheck(BST_UNCHECKED);
GV: Nguyễn Thị Mai Trang 42
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Check Boxes
Để biết được một check boxes đang được
chọn hay khơng chọn, dùng hàm CButton
::GetCheck
GV: Nguyễn Thị Mai Trang 43
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Radio Buttons
Được tạo với style là BS_RADIOBUTTON hoặc
BS_AUTORADIOBUTTON.
Thơng thường, các radio buttons thường nằm
trong một nhĩm, chỉ cho phép người dùng chọn
một trong các radio button. Khi một radio button
được chọn (check), các radio buttons khác trong
nhĩm sẽ được bỏ chọn (uncheck).
Một radio button được tạo với style
BS_AUTORADIOBUTTON sẽ tự động được
chọn hoặc bỏ chọn khi click vào.
GV: Nguyễn Thị Mai Trang 44
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Radio Buttons
Một radio button được tạo với style
BS_RADIOBUTTON sẽ khơng tự động
được chọn hoặc bỏ chọn mà phải dùng
hàm CButton:: SetCheck
GV: Nguyễn Thị Mai Trang 45
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Ví dụ về Radio Buttons, Check Boxes
GV: Nguyễn Thị Mai Trang 46
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Ví dụ về Radio Buttons, Check Boxes (tt)
GV: Nguyễn Thị Mai Trang 47
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Ví dụ về Radio Buttons, Check Boxes (tt)
GV: Nguyễn Thị Mai Trang 48
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Group Boxes
Group boxes button là một control được
tạo với style là BS_GROUPBOX.
Group boxes chỉ là một đối tượng tĩnh bao
quanh các nhĩm controls khác, khơng
nhận focus và khơng gởi bất kỳ thơng báo
nào cho cửa sổ chính
GV: Nguyễn Thị Mai Trang 49
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CListBox Class
Tạo một Listbox
Ví dụ
GV: Nguyễn Thị Mai Trang 50
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
ListBox styles
LBS_STANDARD : Listbox cĩ khung, thanh cuộn đứng,
cho phép chọn item và tự động xếp thứ tự.
LBS_SORT: Tự động xếp thứ tự.
LBS_NOSEL: Khơng cho phép chọn item.
LBS_NOTIFY: Cĩ thơng báo với cửa sổ chính khi chọn
hoặc double click lên một item.
LBS_DISABLENOSCROLL: Vơ hiệu hố thanh cuộn khi
nĩ khơng cần thiết.
LBS_NOREDRAW: Tạo listbox khơng cĩ chức năng tự
vẽ lại khi thêm hoặc loại bỏ một item.
LBS_MULTIPLESEL: Cho phép chọn nhiều items.
GV: Nguyễn Thị Mai Trang 51
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
AddString: Thêm một chuỗi vào cuối listbox, tự
động xếp thứ tự đối với listbox tạo với
LBS_SORT.
– m_wndListBox.AddString (string);
InsertString: Thêm một chuỗi vào listbox tại vị
trí chỉ định.
– m_wndListBox.InsertString (3, string);
– Đối với hai hàm AddString và InsertString, nếu thành
cơng, giá trị trả về là vị trí của item vừa thêm vào.
– Lỗi: LB_ERRSPACE (listbox đầy) hoặc LB_ERR (các
lỗi khác).
GV: Nguyễn Thị Mai Trang 52
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
GetCount: Tổng số items trong listbox.
DeleteString: Loại bỏ một chuỗi từ listbox.
ReseteContent: Loại bỏ tất cả items.
GetText: Lấy ra chuỗi của item tại vị trí chỉ
định
GetCurSel: Lấy vị trí của item đang được
chọn.
SetFont: định dạng font cho các chuỗi văn
bản trong listbox
GV: Nguyễn Thị Mai Trang 53
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
SetItemDataPtr: đưa vào listbox một đối tượng
là con trỏ 32 bits.
– for (int i = 0 ; i GetCount() ; i ++ )
m_pListBox-> SetItemDataPtr ( i , NULL);
SetItemData: Đưa vào listbox một giá trị
DWORD.
– for (int i = 0 ; i GetCount() ; i ++ )
m_pListBox-> SetItemData ( i , i);
GetItemDataPtr, GetItemData: Nhận các giá trị
trên từ listbox.
GV: Nguyễn Thị Mai Trang 54
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
SetCurSel: Chọn item tại vị trí chỉ định.
SelectString: Tìm một chuỗi và chiếu sáng
chuỗi đầu tiên tìm thấy
– m_wndListBox.SelectString (-1, _T(“Times”));
FindString: Tìm một chuỗi, nếu thành cơng trả
về vị trí item chứa chuỗi tìm thấy, khơng tìm thấy
trả về LB_ERR.
FindStringExact: giống FindString, nhưng tìm
chính xác.
SetSel: chọn một item trong listbox được tạo với
style LBS_MULTILESEL.
GV: Nguyễn Thị Mai Trang 55
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
SelItemRange: Chọn một nhĩm items liên tiếp
trong listbox được tạo với style
LBS_MULTILESEL.
m_wndListBox. SetSel (0);
m_wndListBox. SetItemRange ( TRUE , 5, 9 );
m_wndListBox. SetSel (6, FALSE );
Kết quả là các item 0, 5, 7, 8, 9 được chọn.
GetSelCount: trả về giá trị là số items được
chọn.
GetSelItems: trả về chỉ số của tất cả items được
chọn.
GetSelItems: trả về chỉ số của tất cả items được
chọn.
GV: Nguyễn Thị Mai Trang 56
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CListBox
Ví dụ
GV: Nguyễn Thị Mai Trang 57
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Listbox Notifications
GV: Nguyễn Thị Mai Trang 58
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Listbox Notifications
Ví dụ
GV: Nguyễn Thị Mai Trang 59
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CStatic Class
Static control gồm: texts (chuỗi), rectangles
(khung) và images (hình ảnh).
Tạo một static control:
m_wndStatic.Create (_T ("Name"), WS_CHILD ¦
WS_VISIBLE ¦ SS_LEFT, rect, this, IDC_STATIC);
– SS_LEFT : Canh trái chuỗi
– SS_CENTER: Canh giữa
– SS_RIGHT: Canh phải
– SS_CENTERIMAGE: Canh giữa theo phương đứng
GV: Nguyễn Thị Mai Trang 60
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CStatic Class
Cĩ thể chỉ định kiểu của khung chữ nhật
quanh đối tượng static.
GV: Nguyễn Thị Mai Trang 61
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Ví dụ:
m_wndStatic.Create (_T (""), WS_CHILD ¦
WS_VISIBLE ¦ SS_ETCHEDFRAME, rect,
this,IDC_STATIC);
The CStatic Class
GV: Nguyễn Thị Mai Trang 62
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CStatic Class
Cĩ thể tạo một static control hiển thị hình
ảnh như bitmap, icon @
– SS_BITMAP: hiển thị hình ảnh là bitmap
– SS_ICON: hiển thị icon
Sau khi tạo một static control thuộc dạng
trên, để hiển thị hình ảnh, dùng các hàm
SetBitmap, SetIcon.
GV: Nguyễn Thị Mai Trang 63
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Static control Notification
Mặc định, static control khơng gởi thơng
báo nào cho cửa sổ chính. Chỉ cĩ static
control được tạo với SS_NOTIFY mới gởi
các thơng báo dưới đây:
Notification Sent When Message-Map Macro
STN_CLICKED The control is clicked. ON_STN_CLICKED
STN_DBLCLK The control is double-clicked. ON_STN_DBLCLK
STN_DISABLE The control is disabled. ON_STN_DISABLE
STN_ENABLE The control is enabled. ON_STN_ENABLE
GV: Nguyễn Thị Mai Trang 64
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Static control Notification
Ví dụ
GV: Nguyễn Thị Mai Trang 65
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CEdit Class
Edit control gồm hai dạng: single-line và multi-
line.
Tạo một edit control:
m_wndEdit.Create (WS_CHILD ¦ WS_VISIBLE ¦
WS_BORDER ¦ ES_AUTOHSCROLL,
rect, this, IDC_EDIT);
m_wndEdit.Create (WS_CHILD ¦ WS_VISIBLE ¦
WS_BORDER ¦WS_HSCROLL ¦
WS_VSCROLL ¦ ES_MULTILINE,
rect, this, IDC_EDIT);
GV: Nguyễn Thị Mai Trang 66
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Edit control Styles
Style Description
ES_LEFT Canh lề trái văn bản trong editbox.
ES_CENTER Canh giữa.
ES_RIGHT Canh phải.
ES_AUTOHSCROLL Tự động cuộn ngang.
ES_AUTOVSCROLL Tự động cuộn xuống.
ES_MULTILINE Tạo một multiline edit control.
ES_LOWERCASE Chuyển chuỗi trong editbox sang ký tự
thường.
ES_UPPERCASE Chuyển chuỗi trong editbox sang ký tự
hoa.
ES_PASSWORD Hiển thị dấu hoa thị thay cho ký tự.
ES_READONLY Tạo một editbox khơng cho phép chỉnh
sửa.
ES_NOHIDESEL Khơng bỏ chọn khi editbox mất focus.
ES_WANTRETURN Cĩ thể nhấn phím Enter để xuống dịng.
GV: Nguyễn Thị Mai Trang 67
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp Cedit
SetWindowText: đưa một chuỗi vào edit
control.
VD: m_wndEdit.SetWindowText
( _T ("Hello, MFC"));
GetWindowText: Lấy một chuỗi từ edit control.
VD: m_wndEdit.GetWindowText (string);
ReplaceSel: Thay thế chuỗi được chọn bằng
chuỗi mới.
VD: m_wndEdit.ReplaceSel (“newstring");
GV: Nguyễn Thị Mai Trang 68
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp Cedit
GetLine: Lấy một chuỗi từ edit control trên một
hàng.
LineLength: cho kết quả là số bytes trên một
hàng.
GetLineCount: số dịng trong edit control
multiline.
Clear: Xố phần văn bản được chọn trong edit
control.
Cut: Xố phần văn bản được chọn và copy vào
clipboard.
Copy: Copy phần văn bản được chọn vào
clipboard.
GV: Nguyễn Thị Mai Trang 69
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp Cedit
Paste: dán văn bản từ clipboard vào edit control.
VD: m_wndEdit.Paste();
Để kiểm tra trong clipboard cĩ lưu trữ phần văn bản
nào khơng, dùng hàm ::IsClipboardFormatAvailable
VD: BOOL bCanPaste =
::IsClipboardFormatAvailable (CF_TEXT);
Undo: phục hồi lại thao tác trước.
GV: Nguyễn Thị Mai Trang 70
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Edit control Notifications
Notification Message-Map Macro
EN_UPDATE ON_EN_UPDATE
EN_CHANGE ON_EN_CHANGE
EN_KILLFOCUS ON_EN_KILLFOCUS
EN_SETFOCUS ON_EN_SETFOCUS
EN_HSCROLL ON_EN_HSCROLL
EN_VSCROLL ON_EN_VSCROLL
EN_MAXTEXTA ON_EN_MAXTEXT
EN_ERRSPACE ON_EN_ERRSPACE
GV: Nguyễn Thị Mai Trang 71
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The CComboBox Class
Tạo một combobox
CComboBox m_wndComboBox;
m_wndComboBox.Create (WS_CHILD ¦
WS_VISIBLE ¦ WS_BORDER ¦
WS_VSCROLL ¦CBS_DROPDOWNLIST ¦
CBS_SORT, rect, this, IDC_COMBOBOX);
GV: Nguyễn Thị Mai Trang 72
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Combobox Style
– CBS_AUTOHSCROLL
– CBS_DISABLENOSCROLL
– CBS_DROPDOWN
– CBS_DROPDOWNLIST
– CBS_HASSTRINGS
– CBS_LOWERCASE
– CBS_OWNERDRAWFIXED
– CBS_OWNERDRAWVARIABLE
– CBS_SIMPLE
– CBS_SORT
– CBS_UPPERCASE
GV: Nguyễn Thị Mai Trang 73
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CComboBox
AddString: thêm một chuỗi vào combobox.
InsertString: thêm một chuỗi vào combobox tại
vị trí chỉ định.
GetText: Lấy ra chuỗi của item tại vị trí chỉ định.
GetCurSel: Lấy vị trí của item được chọn.
SetCurSel: Chọn item tại vị trí chỉ định.
ShowDropDown: Bật hoặc tắt chế độ dropdown
của combobox.
GetDroppedState: Kiểm tra trạng thái
combobox (cĩ hiển thị danh sách xổ xuống hay
khơng).
GV: Nguyễn Thị Mai Trang 74
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
ComboBox control Notifications
Những sự kiện tác động lên combobox sẽ
gởi thơng báo đến cửa sổ chính qua
WM_COMMAND
GV: Nguyễn Thị Mai Trang 75
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Advanced Controls
Numeric edit control
Owner-Draw List Boxes
Graphical Push Buttons
Customizing a Control's Colors
GV: Nguyễn Thị Mai Trang 76
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Numeric edit control
Là edit control chỉ cho phép nhập giá trị là
số, thường được dùng để nhập dữ liệu là
số như: số điện thoại, serials, địa chỉ IP@
Tạo một Numeric edit control:
GV: Nguyễn Thị Mai Trang 77
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Numeric edit control@
Tạo một Numeric edit control (tt)
GV: Nguyễn Thị Mai Trang 78
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
Mặc định, item trong một listbox là một
chuỗi văn bản. Nếu muốn listbox hiển thị
được hình ảnh, tạo một owner-draw listbox
theo các bước sau:
– Tạo một lớp kế thừa từ lớp CListBox
– Trong đĩ định nghĩa các hàm ảo:
• CListBox::MeasureItem : thiết lập kích thước mỗi
phần tử (item)
• CListBox::DrawItem: vẽ lại các phần tử (item)
• PreCreateWindow: thay đổi ListBox style phù hợp
GV: Nguyễn Thị Mai Trang 79
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
Lưu ý là listbox phải được tạo với style:
LBS_OWNERDRAWFIXED
Hoặc
LBS_OWNERDRAWVARIABLE
Khi listbox được vẽ hoặc vẽ lại, cửa sổ
chính sẽ nhận được WM_DRAWITEM và
WM_MEASUREITEM message. MFC sẽ
gọi hai hàm ảo DrawItem và MeasureItem
GV: Nguyễn Thị Mai Trang 80
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
Ví dụ
GV: Nguyễn Thị Mai Trang 81
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
GV: Nguyễn Thị Mai Trang 82
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
GV: Nguyễn Thị Mai Trang 83
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Owner-Draw List Boxes
GV: Nguyễn Thị Mai Trang 84
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
MFC hỗ trợ hai kỹ thuật để thay đổi một control
color, dựa vào cơ chế là một control khi được vẽ
lại sẽ gởi đến cửa sổ chính một message bao
hàm handle của thiết bị ngữ cảnh dùng để vẽ.
Cửa sổ chính của ứng dụng cĩ thể gọi hai hàm
CDC::SetTextColor và CDC::SetBkColor.
Message mà một control gởi đến cửa sổ chính
của ứng dụng thay đổi tùy theo mỗi loại control.
Ví dụ:
– Một listbox gởi WM_CTLCOLORLISTBOX message.
– Một static control gởi WM_CTLCOLORSTATIC
message.
GV: Nguyễn Thị Mai Trang 85
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
Hàm xử lý
afx_msg HBRUSH OnCtlColor (CDC* pDC,
CWnd* pWnd, UINT nCtlColor)
– pDC: thiết bị ngữ cảnh của control
– pWnd: Con trỏ lớp CWnd nhận dạng control
– nCtlColor: loại message được gởi đến
GV: Nguyễn Thị Mai Trang 86
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
nCtlColor Control Type or Window Type
CTLCOLOR_BTN Push button.
CTLCOLOR_DLG Dialog box.
CTLCOLOR_EDIT Edit control and the edit control
part of a combo box.
CTLCOLOR_LISTBOX List box and the list box part of a
combo box.
CTLCOLOR_MSGBOX Message box.
CTLCOLOR_SCROLLBAR Scroll bar.
CTLCOLOR_STATIC Static control, check box, radio
button, group box, read-only or disabled edit control, and
the edit control in a disabled combo box.
GV: Nguyễn Thị Mai Trang 87
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
GV: Nguyễn Thị Mai Trang 88
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
Đối với một lớp control tự tạo kế thừa từ
lớp cơ sở, dùng marcro
ON_WM_CTLCOLOR_REFLECT
GV: Nguyễn Thị Mai Trang 89
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Customizing a Control's Colors
GV: Nguyễn Thị Mai Trang 90
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tham khảo
CCheckListBox
CListControl
GV: Nguyễn Thị Mai Trang 91
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tham khảo
CBitmapButton
CComboBoxEx
GV: Nguyễn Thị Mai Trang 92
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tham khảo
CTreeControl
CRichEdit
GV: Nguyễn Thị Mai Trang 93
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 3: Kiến trúc Documents / Views
Kiến trúc Document/View
Giao diện đơn tài liệu (Single Document
Interface - SDI)
Giao diện đa tài liệu (Multiple Document
Interface - MDI)
GV: Nguyễn Thị Mai Trang 94
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc Document/View
GV: Nguyễn Thị Mai Trang 95
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Giao diện đơn tài liệu (SDI)
Giới thiệu
Kiến trúc ứng dụng SDI
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 96
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Giới thiệu ứng dụng SDI
Ứng dụng SDI là một ứng dụng mà tại một
thời điểm chỉ cĩ thể làm việc với duy nhất
một tài liệu.
Ứng dụng SDI cho phép lưu trữ dữ liệu
vào một tập tin và cho phép mở tài liệu từ
tập tin
Một số ví dụ điển hình cho các ứng dụng
SDI là Notepad, Wordpad và Paint.
GV: Nguyễn Thị Mai Trang 97
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng SDI
Một ứng dụng SDI bao gồm bốn lớp căn bản:
Lớp dẫn xuất CWinApp: tạo tất cả các thành phần khác
trong ứng dụng. Đây là lớp nhận các thơng báo sự kiện
và chuyển tới các lớp CView và CFrameView
Lớp dẫn xuất CFrameView: khung cửa sổ chứa menu,
thanh cơng cụ, thanh cuộn@
Lớp dẫn xuất CDocument: là nơi cĩ thể xây dựng các
cấu trúc dữ liệu và thao tác dữ liệu tạo nên tài liệu của
ứng dụng, lưu trữ và lấy dữ liệu từ các files. Lớp này
nhận dữ liệu từ lớp CView và truyền thơng tin hiển thị
đến lớp CView.
Lớp dẫn xuất CView: hiển thị bề mặt giao diện của ứng
dụng, nhận thơng tin về dữ liệu từ lớp CDocument và
truyền thơng tin đến lớp CDocument
GV: Nguyễn Thị Mai Trang 98
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng SDI
GV: Nguyễn Thị Mai Trang 99
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Lớp CWinApp
Hàm Thành phần InitInstance là nơi chứa các đoạn mã tạo các
lớp MainFrame, CView, Document
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate (
IDR_MAINFRAME,
RUNTIME_CLASS (CMyDoc),
RUNTIME_CLASS (CMainFrame),
RUNTIME_CLASS (CMyView)
);
AddDocTemplate (pDocTemplate);
CCommandLineInfo cmdInfo;
ParseCommandLine (cmdInfo);
if (!ProcessShellCommand (cmdInfo))
return FALSE;
m_pMainWnd->ShowWindow (SW_SHOW);
m_pMainWnd->UpdateWindow ();
Tạo các thành phần
của ứng dụng SDI từ
lớp
CSingleDocTemplate
Gọi hàm thành phần
CWinApp::OnFileNew
Tạo đối tượng
CCommandLineInfo
nhận thông tin phản hồi
GV: Nguyễn Thị Mai Trang 100
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CDocument
GetFirstViewPosition: Trả về giá trị POSITION
để duyệt danh sách các Views
GetNextView : Trả về con trỏ kế tiếp thuộc lớp
CView trong danh sách các Views
GV: Nguyễn Thị Mai Trang 101
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CDocument
GetPathName: Trả về chuỗi đường dẫn
đầy đủ của file tài liệu.
GetTitle: Trả về chuỗi tiêu đề của tài liệu.
Ví dụ: "MyFile"
IsModified: trả về giá trị khác 0 nếu tài liệu
đã được sửa đổi.
SetModifiedFlag: Thơng báo tài liệu đã
được thay đổi.
UpdateAllViews: Cập nhật / vẽ lại tất cả
các Views.
GV: Nguyễn Thị Mai Trang 102
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CDocument
OnUpdate : Cập nhật / vẽ lại một Views.
OnNewDocument Tạo một tài liệu mới.
OnOpenDocument Mở một file tài liệu từ đĩa
DeleteContents
Ví dụ: Xố nội dung tài liệu.
void CMyDoc::OnEditClearAll()
{
DeleteContents();
UpdateAllViews(NULL);
}
GV: Nguyễn Thị Mai Trang 103
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CDocument
Serialize
Ví dụ: Lưu dữ liệu và lấy dữ liệu từ file
void CMyDoc::Serialize (CArchive& ar) {
if (ar.IsStoring ()) {
ar << m_strName << m_strPhone;
}
else { // Loading, not storing.
ar >> m_strName >> m_strPhone;
}
}
GV: Nguyễn Thị Mai Trang 104
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CView
GetDocument : Trả về lớp tài liệu chứa View
thơng qua biến thành phần m_pDocument
OnDraw: Vẽ cửa sổ view
void CMyView::OnDraw (CDC* pDC)
{
CMyDoc* pDoc = GetDocument ();
CString string = pDoc->GetString ();
CRect rect;
GetClientRect (&rect);
pDC->DrawText (string, rect, DT_SINGLELINE ¦
DT_CENTER ¦ DT_VCENTER);
}
GV: Nguyễn Thị Mai Trang 105
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Một số hàm thuộc lớp CView
OnInitialUpdate: Được gọi trước khi một
view được khởi tạo và hiển thị. Thơng
thường, việc khởi tạo giá trị các biến thành
phần của lớp CView đặt trong hàm này.
OnUpdate: Được gọi khi dữ liệu đã thay
đổi để cập nhật lại View.
GV: Nguyễn Thị Mai Trang 106
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 107
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 108
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 109
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 110
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng SDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 111
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Giao diện đa tài liệu (MDI)
Giới thiệu
Kiến trúc ứng dụng MDI
Tạo ứng dụng MDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 112
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Giới thiệu ứng dụng MDI
Ứng dụng MDI là một ứng dụng mà tại
một thời điểm cĩ thể làm việc với nhiều tài
liệu với nhiều kiểu ứng dụng.
Một số ví dụ điển hình cho các ứng dụng
MDI là Word, Excel.
GV: Nguyễn Thị Mai Trang 113
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng MDI
Các lớp căn bản:
– Lớp dẫn xuất CWinApp
– Lớp dẫn xuất CMDIFrameWnd: Lớp CMainFrame
được suy dẫn từ lớp này là khung chính của ứng
dụng, chứa menu, thanh cơng cụ@
– Lớp dẫn xuất CMDIChildWnd: Lớp CChildFrame
được suy dẫn từ lớp này là khung chứa lớp CView.
Đây là lớp truyền thơng điệp và sự kiện tới các lớp
hiển thị để xử lý hoặc hiển thị.
– Lớp dẫn xuất CDocument
– Lớp dẫn xuất CView
GV: Nguyễn Thị Mai Trang 114
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng MDI
Các lớp căn bản của ứng dụng MDI được tạo
thành từ lớp CWndApp tương tự ứng dụng SDI,
nhưng sử dụng lớp CMultiDocTemplate thay cho
lớp CSingleDocTemplate
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MDISQUTYPE,
RUNTIME_CLASS(CSquaresDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CSquaresView));
AddDocTemplate(pDocTemplate);
GV: Nguyễn Thị Mai Trang 115
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng MDI
Các thao tác trên mỗi View đối với ứng
dụng MDI nhìn chung tương tự như ứng
dụng SDI. Tuy nhiên ứng dụng MDI cịn
hỗ trợ các chức năng như sắp xếp các
Views, thao tác trên từng View@
GV: Nguyễn Thị Mai Trang 116
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Kiến trúc ứng dụng MDI
GV: Nguyễn Thị Mai Trang 117
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng MDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 118
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo ứng dụng MDI bằng MFC AppWizard
GV: Nguyễn Thị Mai Trang 119
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Bài 4: Kết hợp các hộp thoại
(Dialog, Property Sheets)
vào một chương trình
Modal Dialog Boxes and the CDialog
Class
Modeless Dialog Boxes
Property Sheets
The Common Dialogs
GV: Nguyễn Thị Mai Trang 120
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modal Dialog Boxes and the CDialog Class
Các bước tạo một Modal Dialog Box
– Thiết kế Dialog và các controls trên dialog
– Tạo một đối tượng của lớp CDialog
– Gọi hàm CDialog::DoModal() để hiển thị
dialog
GV: Nguyễn Thị Mai Trang 121
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modal Dialog Boxes and the CDialog Class
Tạo một Dialog và lớp mới từ Class
Wizard
GV: Nguyễn Thị Mai Trang 122
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modal Dialog Boxes and the CDialog Class
Ví dụ
CMyDialog dlg;
dlg.DoModal ();
hoặc
CMyDialog dlg;
if (dlg.DoModal () == IDOK)
{
// The user clicked OK; do something!
}
GV: Nguyễn Thị Mai Trang 123
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modal Dialog Boxes and the CDialog Class
Mặc định, một modal dialog box sẽ trả về
một trong hai giá trị là IDOK hoặc
IDCANCEL
Tuy nhiên, ta cĩ thể tạo một lớp dialog trả
về một giá trị khác bằng cách gọi
EndDialog
GV: Nguyễn Thị Mai Trang 124
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modal Dialog Boxes and the CDialog Class
Ví dụ
GV: Nguyễn Thị Mai Trang 125
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modeless Dialog Boxes
Điểm khác nhau giữa Modal dialog và Modeless
dialog:
GV: Nguyễn Thị Mai Trang 126
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Modeless Dialog Boxes
Điểm khác nhau giữa Modal dialog và Modeless
dialog:
Cho phép người dùng tiếp
tục làm việc với phần cịn
lại của ứng dụng khi hộp
thoại mở
Khi hiển thị, hộp thoại modal
dừng tồn bộ tiến trình xử lý
của ứng dụng cho đến khi
người sử dụng đáp lại hộp thoại
Hiển
thị
DestroyWindow
Khơng cĩ trị trả về
EndDialog
Cĩ trị trả về (IDOK,
IDCANCEL@)
Kết
thúc
Create()
ShowWindows()
DoModal()Tạo
dialog
Modeless dialogModal dialog
GV: Nguyễn Thị Mai Trang 127
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Tạo một Modeless Dialog Box
Thiết kế Dialog và các controls trên dialog
Tạo một đối tượng của lớp CDialog
Gọi hàm Create và ShowWindow để tạo
và hiển thị Dialog
CModelessDlg pDialog;
@
pDialog.Create(IDD_MODELESS_DIALOG);
pDialog.ShowWindow(SW_SHOW);
GV: Nguyễn Thị Mai Trang 128
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Property Sheets
Property Sheet gồm 2
lớp được định nghĩa
trong file Afxdlgs.h :
– CPropertySheet :Trình
bày những thuộc tính
của Sheet và thừa kế
từ lớp CWnd
– CPropertyPage : Trình
bày những thuộc tính
của trang và thừa kế từ
lớp CDialog
GV: Nguyễn Thị Mai Trang 129
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Property Sheets
Tạo một modal property sheet :
– Đối với mỗi trang trong property sheet, tạo
mỗi Dialog kế thừa từ lớp cơ sở
CPropertyPage và thiết lập các thuộc tính cho
Dialog (tiêu đề trang, các controls@)
– Tại lớp chính (kế thừa từ lớp cơ sở
CPropertySheet , khai báo biến cho từng
sheet tạo ở bước 1.
– Tại lớp chính, dùng
CPropertySheet::AddPage để thêm các sheet
vào theo thứ tự lựa chọn.
– Gọi hàm DoModal() để hiển thị .
GV: Nguyễn Thị Mai Trang 130
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Property Sheets
Ví dụ
GV: Nguyễn Thị Mai Trang 131
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Property Sheets
GV: Nguyễn Thị Mai Trang 132
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
The Common Dialogs
The Common Dialog Classes
– Class Dialog Type(s)
– CFileDialog Open and Save As dialog
boxes
– CPrintDialog Print and Print Setup dialog
boxes
– CPageSetupDialog Page Setup dialog boxes
– CFindReplaceDialog Find and Replace dialog boxes
– CColorDialog Color dialog boxes
– CFontDialog Font dialog boxes
GV: Nguyễn Thị Mai Trang 133
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CFileDialog
GV: Nguyễn Thị Mai Trang 134
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CFileDialog
Hiển thị một open dialog hoặc save as dialog:
CFileDialog( BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL );
– bOpenFileDialog: TRUE (open dialog) , FALSE (save as dialog)
– lpszDefExt: phần mở rộng, mặc định NULL
– lpszFileName: Chỉ định tên file hiển thị trong editbox, mặc định là
NULL
– dwFlags: kết hợp một hoặc nhiều cờ cho phép chỉ định thuộc
tính của dialog
– lpszFilter: chỉ định các file hiển thị trong listbox
GV: Nguyễn Thị Mai Trang 135
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CFileDialog
Các hàm thuộc lớp CFileDialog
– GetPathName();
– GetFileName()
– GetFileTitle ()
GV: Nguyễn Thị Mai Trang 136
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CColorDialog
Hiển thị hộp thoại
// Show the Color dialog with all the
default settings.
CColorDialog dlg;
dlg.DoModal();
// Show the fully opened Color
dialog with red as the selected
color.
CColorDialog dlg(RGB(255, 0, 0),
CC_FULLOPEN);
dlg.DoModal();
GV: Nguyễn Thị Mai Trang 137
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CColorDialog
Lấy trị trả về của hộp thoại CColorDialog
GetColor( ) : trả về màu được chọn
GV: Nguyễn Thị Mai Trang 138
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CFontDialog
GV: Nguyễn Thị Mai Trang 139
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Hộp thoại CFontDialog
GV: Nguyễn Thị Mai Trang 140
Lập trình Windows – Các sự kiện – Xử lý sự kiện trong Windows
Các hàm thuộc lớp CFontDialog
– GetCurrentFont
– GetFaceName
– GetStyleName
– GetSize
– GetColor
– GetWeight
– IsStrikeOut
– IsUnderline
– IsBold
– IsItalic
Các file đính kèm theo tài liệu này:
- tailieu.pdf