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
348 trang | 
Chia sẻ: Khủng Long | Lượt xem: 1754 | 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 tailieu.pdf