Tải bản đầy đủ (.pdf) (133 trang)

VC MFC www kho sach blogspot com

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.23 MB, 133 trang )




:
1.1
1.2
1.3
1.4
1.5

1.6
1.7
1.8
1.9

Chương trình ( Program )
Ứng dụng ( Application )
Tiến trình ( Process )
Tiểu trình (Thread )
Thông điệp ( Message )
1.5.1 Nguồn gốc của message
1.5.2 Các loại message
1.5.3 Số hiệu message (Message Indentifier – MessageID)
1.5.4 Đặc tả message
Cửa sổ giao diện (window) của ứng dụng
Message queue
Kiến trúc xử lý của ứng dụng trong Windows
Resource của ứng dụng
:

Trang



1
1
1
1
1
2
2
2
3
3
3
5
7
8

2.1 Thư viện MFC (Microsoft Foundation Class)
2.2 Tiếp an MFC
2.3 Tạo ứng dụng windows với MFC như thế nào ?
2.4 Lớp quản lý tiểu trình CwinThread
2.5 Lớp quản lý tiểu trình giao diện chính CwinApp
2.6 Thực hiện ứng dụng đơn giản
2.7 Thực hiện ứng dụng giao tác đơn giản
2.8 Tạo mới Icon Resource cho ứng dụng
2.9 Lưu trữ chương trình nguồn
2.10 Lớp Cstring của MFC

10
10
10

10
11
12
14
20
25
27
27

:
Các công cụ giao diện đồ họa
Device Context
Tọa độ trên giao diện đồ họa
Các lớp MFC hỗ trợ GDI
3.4.1 Các lớp đối tượng điểm, hình chữ nhật

29
29
29
29
30
30

3.1
3.2
3.3
3.4

3.4.2 Lớp Cpen
3.4.3 Lớp CBrush

3.4.4 Lớp CFont
3.4.5 Lớp CBitmap
3.4.6 Lớp CPalette
3.4.7 Lớp CRgn
3.5 Lớp CDC
3.6 Lớp CImageList

31
31
32
32
33
34
35
38

:
4.1 Cửa sổ giao diện
4.2 Lớp CWnd
4.3 Sử dụng đối tượng CWnd
4.3.1 Sử dụng CWnd làm giao diện chính của ứng dụng
4.3.2 Ứng dụng chỉ chạy một bản (instance) tại mỗi thời điểm

40
40
40
49
49
50


5.1
5.2
5.3
5.4

6.1
6.2
6.3
6.4
6.5
6.6
6.7

:
Lớp xử lý message CCmdTarget:
Khai báo mục xử lý message trong MessageMap
Các lớp kế thừa CCmdTarget
MessageMap của lớp kế thừa CWnd trong ứng dụng
5.4.1 Cửa sổ của ứng dụng có chức năng hoạt động
5.4.2 WM_PAINT và hành vi OnPaint của CWnd

51
51
52
55
55
55
58

:

DC và BITMAP
Ứng dụng với cửa sổ chính hiển thò ảnh
Sao chép ảnh từø DC đến DC, phóng to & thu nhỏ ảnh
DC trong bộ nhớ ( DC ảo) – vùng vẽ đệm lý tưởng
Ảnh chuyển động trong vùng client
CImageList – công cụ quản lý bộ ảnh cùng cỡ
CRgn – Cửa sổ có hình dạng tùy ý

60
60
60
63
64
65
66
67

:
7.1 Đònh nghóa
7.2 Menu resoure

69
69
69


7.3
7.4
7.5
7.6

7.7

Sử dụng menu resource
Mục xử lý command message từ mục chọn của menu
Phím tắt (hot key ) cho mục chọn trên menu
Lớp quản lý menu – CMenu
Xử lý điều khiển mục chọn của menu

71
72
73
75
77

:
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9

9.1
9.2
9.3

9.4

9.5

9.6
9.7

CStatic
CEdit
CButton
ClistBox
CComboBox
CSpinButtonCtrl
CProgressCtrl
CscrollBar
CSliderBar

78
78
80
84
85
88
91
93
94
96

:
Hộp hội thoại (Dialog)
Lớp CDialog
Tạo và sử dụng dialog trong chương trình

9.3.1 Tạo dialog resource
9.3.2 Khai báo lớp kế thừa CDialog sử dụng dialog resource
9.3.3 Sử dụng dialog trong chương trình
Liên kết giữa dialog và các thành phần khác
Sử dụng dialog làm giao diện chính của ứng dụng
9.5.1 Thực hiện ứng dụng với giao diện chính là dialog
9.5.2 Dùng MFC wizard tạo ứng dụng với giao diện dialog
Khai báo biến cho control trên dialog
Khai thác các tiện ích hỗ trợ

97
97
97
99
99
103
104
104
106
106
107
109
112

:
10.1 Khung cửa sổ giao diện (Frame Window)
10.2 Thanh trạng thái (statusbar) & lớp CStatusbar
10.3 Thanh công cụ (toolbar) & lớp CToolBar

117

117
117
119

10.3.1 Thiết kế ToolBar resource
10.3.2 Dùng toolbar resource cho CToolBar của FrameWnd
10.4 Lớp CFrameWnd
10.5 Sử dụng frame window làm giao diện chính
10.5.1 Thực hiện ứng dụng với giao diện frame window
10.5.2 String Table và CFrameWnd
10.5.3 Dùng MFC wizard tạo ứng dụng giao diện framewindow

11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
11.10

:
CDocument
CView
CFrameWnd
CDoctemplate
Hỗ trợ từ phía đối tượng quản lý ứng dụng
Trình tự tạo lập các đối tượng tham gia bộ DVF

Text Document Appication
Rich Text Format (rtf) Document Appication
HTML Document View Appication
Một số lớp view đặc biệt
11.10.1 CListView
11.10.2 CTreeView
11.10.3 CSplitterWnd
11.10.4 Sử dụng splitterwnd trong frame window
11.10.5 Các ví dụ thực hành

:
Tập tin INI
System Registry
Vùng Status Area trên Taskbar
Ứng dụng ScreenSaver
12.4.1 Đặc điểm
12.4.2 Tham số dòng lệnh
12.4.3 Đặc điểm giao tác với người dùng
12.4.4 Thực hiện ứng dụng ScreenSaver đơn giản
12.5 Ứng dụng sử dụng nhiều tiểu trình
12.5.1 Tiểu trình xử lý nội
12.1
12.2
12.3
12.4

120
121
121
123

123
124
130
134
134
135
136
136
137
138
139
143
146
149
149
150
152
154
155
158
158
160
162
167
168
168
170
171
175
175



12.6
12.7
12.8

12.9

12.5.2 Tiểu trình giao diện
12.5.3 Các hàm hỗ trợ
Lập trình Multimedia với MCI
Ấn đònh một số tính năng của Windows
Bẫy (hook) message (Windows Hook)
12.8.1 Các kiểu hook (Hook Type)
12.8.2 Danh sách hook (Hook Chain)
12.8.3 Thủ tục hook (Hook Procedure)
12.8.4 Các dòch vụ liên quan hook
12.8.5 Ứng dụng hook messages của keyboard
Cài đặt chế độ thực hiện ứng dụng tự động

177
179
179
181
182
183
183
183
184
185

186

13.7.2 Thiết kế ứng dụng nhận mail
13.8 TCP với HTTP và FTP
13.8.1 Lớp CInternetSession
13.8.2 Lớp CInternetFile
13.8.3 Lớp CFtpConnection
13.8.4 Lớp CFtpFindFile
13.8.5 Lớp CHttpConnection
13.8.6 Lớp CHttpFile
13.8.7 Thực hiện ứng dụng FTP client đơn giản
13.8.8 Thực hiện ứng dụng HTTP client đơn giản

220
223
223
224
225
227
228
229
231
232

:
:
13.1 Giao thức truyền thông TCP/IP
13.1.1 Giới thiệu
13.1.2 Kiến trúc của giao thức TCP/IP trên mô hình DARPA
13.1.3 Đòa chỉ IP

13.1.4 Subnet
13.1.5 Subnet Mask
13.1.6 Host domain name
13.1.7 IP Routing
13.2 Lập trình TCP/IP với Winsock
13.2.1 Port
13.2.2 Socket
13.2.3 Một số cấu trúc dữ liệu của Winsock API
13.2.4 Một số dòch vụ của Winsock API
13.3 MFC với lập trình Winsock
13.3.1 Khởi động Winsock
13.3.2 Lớp CAsyncSocket
13.4 Lập trình Winsock cho giao thức UDP
13.5 Lập trình Winsock cho giao thức TCP
13.6 TCP với SMTP (Simple Mail Transfer Protocol)
13.6.1 Qui ước giữa ứng dụng gửi mail và nhận mail
13.6.2 Thiết kế ứng dụng gửi mail
13.7 TCP với Pop3 (Post Office Protocol – Version 3)
13.7.1 Qui ước giữa ứng dụng mail client và mail server

187
187
187
187
189
190
191
192
194
197

197
198
198
199
200
200
200
204
207
215
215
217
219
219

A.1 Lập trình hướng đối tượng (OOP)
A.2 Các khái niệm
A.2.1 Lớp (Class)
A.2.2 Đối tượng (Object)
A.2.3 Thuộc tính (Attribute)
A.2.4 Hành vi (Method)
A.2.5 Chương trình (Program)
A.3 Đặc điểm lập trình hướng đối tượng
A.4 Phân loại thuộc tính và hành vi
A.5 Các hành vi đặc biệt
A.6 Khai báo lớp, đối tượng trong C++
A.6.1 Khai báo lớp
A.6.2 Khai báo đối tượng
A.6.3 Sử dụng đối tượng trong chương trình
A.7 Kế thừa trong C++

A.7.1 Kế thừa hành vi tạo lập
A.7.2 Kế thừa hành vi hủy bỏ
A.7.3 Thực hiện hành vi lớp cơ sở
A.8 Khai báo hành vi toán tử số học
A.9 Con trỏ this
A.10 Hành vi virtual
A.11 Thuộc tính và hành vi tónh

234
234
234
234
234
234
235
235
235
236
236
236
236
238
238
239
239
240
240
241
243
243

244


x}(|y

Ngôn ngữ lập trình C++ được biết đến như là một trong những ngôn ngữ
lập trình mạnh nhất nhờ khả năng của nó trong việc triển khai phần mềm
ở các mức độ khác nhau. Từ mức hệ thống đến mức ứng dụng, từ lập trình
cấu trúc đến lập trình hướng đối tượng, từ lập trình dựa trên thuật giải đến
lập trình trí tuệ nhân tạo, và từ lập trình cơ sở dữ liệu đến lập trình cơ sở
tri thức…, bất cứ đâu, khi mà người lập trình muốn thể hiện ý tưởng khoa
học và nghệ thuật của mình trên máy tính thì C++ là một điều nghó đến
trước tiên.
Nhưng dù ý tưởng có bay bổng thế nào đi nữa thì cũng không thể bỏ qua
vấn đề cài đặt mà môi trường cho ứng dụng là điều phải quan tâm. Với xu
hướng sử dụng hệ điều hành Microsoft Windows như hiện nay, chúng ta
buộc phải nghó đến việc cài đặt ứng dụng của mình trong môi trường này
và khai thác nó sao cho ứng dụng hoạt động hiệu quả nhất.
Microsoft Visual C++, sản phẩm của Microsoft, với khả năng biên dòch ưu
việt và lối khai thác hệ thống rộng mở nhờ tập hợp lớp thư viện MFC cho
C++ có đầy đủ các tiện ích giúp chúng ta vét được mọi ngõ ngách của
Windows hầu phục vụ cho ứng dụng của mình.
Từ những nhận đònh nói trên, cuốn sách này được thực hiện để cùng các
bạn bắt đầu làm quen lập trình trong Windows áp dụng kỹ thuật lập trình
hướng đối tượng với C++, nhằm khai thác hiệu quả thư viện MFC và từng
bước du nhập vào thế giới tuyệt vời này thông qua các ứng dụng được sắp
xếp theo các cấp độ tiến triển phù hợp.
Trong lần xuất bản đầu tiên, cuốn sách này chắc không tránh khỏi thiếu
sót. Chúng tôi rất mong tiếp thu ý kiến đóng góp và trao đổi cùng bạn đọc.
Cuối cùng, chúng tôi xin chân thành cảm ơn bạn bè, đồng nghiệp đã cung

cấp những nhận xét và kiến thức q báu để thực hiện cuốn sách này. Xin
cảm ơn các bạn học viên-sinh viên, những người đã cùng làm việc với
chúng tôi qua nội dung này và đã có những ý kiến khách quan giúp chỉnh
sửa cuốn sách kòp thời.
Thành phố Hồ Chí Minh, ngày 19.11.2002
Tác giả

[1]
[2]
[3]
[4]
[5]

, Windows 95 - Win32 Programming API-BIBLE,
Waite Group Press 1996.
, Programming Windows 95 with MFC, Microsoft Press.
, Professional Visual C++ ISAPI Programming, Wrox Press.
, Microsoft Developer Network - MSDN,
Microsoft Corporation Software.
,Visual C++ Windows Shell Programming, Wrox Press.
xw(vy

:
- Microsoft Visual C++ 6.0 hoặc Microsoft Visual C++ .NET.
- MSDN ( Microsoft Developer Network ), bản tháng 10/2003.
:
Source Code của các ví dụ minh họa trong cuốn sách này và của một số
chương trình trò chơi mà chúng tôi mong muốn chia xẻ cùng bạn đọc
được lưu trong đóa mềm đính kèm, và có thể download từ đòa chỉ:
/>:

Source Code đặc sắc của nhiều tác giả trên thế giới có thể download:
-
-
-
-
-
-
:
- Tác giả:
- Cơ quan:
- Đòa chỉ e-mail:

Lê Ngọc Thạnh
Khoa Tin Học Quản Lý, Trường ĐHKT TP.HCM
Đòa chỉ: 279 Nguyễn Tri Phương Q10, TP.HCM.




:

M
:
1.1
Ch ng trình máy tính là t p h p các ch th ụi u khi n ho t ụ ng c a
máy, ụ c b trí theo m t trình t logic nh m ph i h p th c hi n m t
cơng vi c xác ụ nh. Các ch th ụ c th hi n d i d ng mã ngu n
(source code) hay mã máy (machine code). Ch ng trình mã máy có th
th c hi n ụ c trên máy có b l nh t ng thích, v i ch ng trình mã
ngu n thì ph i s d ng m t ng d ng chun d ng ụ chuy n sang mã

máy tr c khi th c hi n.
Vi c chuy n các ch th d ng mã ngu n sang ch th mã máy ụ th c
hi n ụ c ti n hành b ng m t trong hai c ch sau:
̇ Thơng d ch: M i ch th mã ngu n ụ c chuy n sang ch th mã máy
t ng ng và ụ c th c hi n ngay, sau ụó ti p t c v i ch th k ti p.
̇ Biên d ch: T t c các ch th mã ngu n ụ c chuy n sang các ch th
mã máy t ng ng. T p h p các ch th mã máy này g i là ch ng
trình mã máy. Ch ng trình mã máy ụ c l u l i trong t p tin ch ng
trình và v sau ta có th th c hi n chúng m t cách ụ c l p trên máy.
:
1.2
Khi m t ch ng trình ụ c cài ụ t trên máy tính ụ s d ng, ta g i ụó
là ng d ng, ví d nh ng d ng NotePad, ng d ng Microsoft Word,....
Trong mơi tr ng windows, m i ng d ng có th ụ c thi hành nhi u
l n thành nhi u b n khác nhau. M i b n ụang th c hi n c a m t ng
d ng g i là th hi n (instance) c a ng d ng ụó.
:
1.3
Ti n trình là khái ni m ch m t instance ụang ho t ụ ng c a ng
d ng. Khi ta double-click trên bi u t ng NotePad ụ ch y ng d ng
này, ta có m t ti n trình c a ng d ng NotePad.

̇ Ti u trình giao di n (user-interface thread): Có nhi m v x lý các u
c u c a ng i dùng trong q trình giao tác v i h .
̇ Ti u trình x lý n i (worker thread): Có nhi m v th c hi n các x lý
tính tốn bên trong, khơng tr c ti p nh n u c u c a ng i dùng.
Q Th c ra, có th xem ti u trình giao di n nh là m t ti u trình x lý n i
nh ng có tính n ng giao tác v i ng i s d ng.
:
1.5

Thơng ụi p (message) là giá tr ph n ánh m t n i dung giao ti p hay
u c u x lý gi a h th ng (windows) và ng d ng, gi a các ng d ng
v i nhau ho c gi a các thành ph n trong cùng m t ng d ng.
:
1.5.1
C windows và ng d ng ụ u có th phát sinh message.
̇ Windows phát sinh message khi c n thơng tin cho ng d ng các
ho t ụ ng nh p-xu t (ho t ụ ng gõ phím, di chuy n hay click chu t,
. c a ng i dùng), các thay ụ i c a h th ng (font ch , ch ụ phân
gi i màn hình, màu s c,...) ho c nh ng bi n ụ i khác liên quan ụ n
ng d ng.
̇
ng d ng phát sinh message khi x lý ụi u khi n các thành ph n
bên trong ng d ng ph i h p th c hi n ch c n ng giao ti p v i ng i
dùng, ho c khi ng d ng th c hi n giao ti p v i windows hay v i các
ng d ng khác ụang th c hi n trong cùng h th ng.
1.5.2
:
̇ Message ụ c ụ nh ngh a b i h th ng: Là các message do h ụi u
hành windows t o ra nh m ph c v ho t ụ ng ụi u khi n tồn b h
th ng, x lý thơng tin vào-ra ho c các thơng tin khác cho ng d ng.
Khi có nhu c u, ng d ng có th s d ng nh ng message này ụ
phát ụ ng m t ch c n ng ụi u khi n nào ụó c a windows.
̇ Message ụ c ụ nh ngh a b i ng i dùng: Là các message do ng i
vi t ng d ng ụ nh ngh a nh m t o kênh liên l c ụ c thù gi a các
thành ph n trong ng d ng, gi a ng d ng v i windows ho c v i
các ng d ng khác ụang th c hi n trong cùng h th ng.

:
1.4

Ti u trình là m t nhánh x lý ụ c l p trong ti n trình. Khi m t ng
d ng ụ c th c hi n ta có thêm m t ti n trình. Do b n ch t ch ng trình
làm nên ng d ng ụó bao g m ch ng trình chính (
hay
)
và các ch ng trình con mà ti n trình ng v i nó có th tách thành các
nhánh x lý: m t nhánh x lý chính (primary thread), các nhánh x lý ph
(other threads). Các nhánh x lý này g i là các ti u trình. Có hai lo i ti u
trình:
Một số khái niệm lập trình trong môi trường Windows

1

2

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


1.5.3 S
:
Có r t nhi u message khác nhau ụ c s d ng trong mơi tr ng
windows. ng v i m i message xác ụ nh, windows s d ng m t giá tr
ngun khơng âm ụ ụ c t , giá tr này g i là s hi u message.
Các message do windows ụ nh ngh a có s hi u ụ c khai báo s n
và duy nh t v i các h ng s xác ụ nh và tên g i g i nh c a chúng có
d ng WM_xxx. Các messges do ng i dùng ụ nh ngh a c ng ph i ụ ng
ký s hi u. S hi u ụ ng ký khơng ụ c trùng l p và có giá tr nh nh t
b ng WM_USER (m t h ng s do windows ụ nh ngh a).
S hi u message là c s ụ phân bi t các message l n nhau.
:

1.5.4 Ð
Ð ụ i t ng nh n message có thêm thơng tin v hồn c nh phát
sinh và ý ngh a c th c a message, windows cho phép message ụ c
nh n thơng qua m t c u trúc ch a s hi u message và các thơng s
kèm theo. C u trúc này ụ c khai báo thành ki u MSG v i n i dung nh
sau:
typedef struct
HWND
UINT
WPARAM
LPARAM
DWORD
POINT
}
;

{

hwnd;
message;
wParam;
lParam;
time;
pt;

// Giá tr có kích th c 4 bytes (long)
// S hi u c a message
// Giá tr khơng âm có kích th c 2 bytes
// Giá tr khơng âm có kích th c 4 bytes
// Th i ụi m sinh ra messsge

// T a ụ cursor khi message ụ c g i.

Tr ng hwnd (window handle) c a c u trúc ch a th (handle) qu n lý
c a s giao di n liên quan ụ n message. wParam và lParam là hai tham
s g i kèm theo message làm nhi m v ch a thơng tin b sung. Hai
tham s này ụ c dùng khi message có nhi u ý ngh a th c t khác nhau.
H Windows s d ng giá tr có kích th c 4 bytes ụ qu n lý các ụ i
t ng c a nó. Giá tr này g i là th qu n lý ụ i t ng (object handle).
ng v i m i lo i ụ i t ng c th , windows s d ng m t ki u handle
riêng. HWND là ki u handle dùng qu n lý ụ i t ng c a s giao di n
trong windows.
1.6 C
:
C a s giao di n là thành ph n quan tr ng trong vi c t o ra mơi
tr ng giao di n ụ h a c a các ng d ng trong windows. Cùng v i s
phát tri n c a h ụi u hành windows, hình nh c a s giao di n c ng
thay ụ i theo v i chi u h ng sinh ụ ng h n v hình th c và phong phú
h n v ch c n ng. Ði u ụó khơng ch góp ph n t ng tính th m m mà
Một số khái niệm lập trình trong môi trường Windows

3

còn t o s g n g i h n gi a giao di n c a ng d ng trong windows v i
ng i dùng.
D ng thơng th ng c a m t c a s giao di n trong windows:

̇ System Menu Box: Ch a bi u t ng c a ng d ng, là nút m h p
menu h th ng v i các m c di chuy n, thay ụ i kích th c ho c ụóng
c as .
̇ Caption bar: Thanh tiêu ụ c a ng d ng.

̇ Menu bar: H th ng menu v i các m c l a ch n x lý.
̇ Minimize / Maximize Box : Nút ụi u khi n thu nh / phóng to c a s .
̇ Restore Box : Nút khơi ph c kích th c tr c ụó c a c a s .
̇ Border: Ð ng vi n bao quanh c a s .
̇ Client area: Vùng làm vi c c a c a s , dùng ụ hi n th thơng tin.
̇ Scroll bar: Thanh cu n n i dung vùng làm vi c c a c a s .
̇ Window Procedure: Ngồi giao di n ụ h a, c a s c a windows có
kh n ng ti p nh n và x lý message. Kh n ng này ụ c th c hi n
thơng qua hàm x lý message mà ta ụã g n cho c a s . Hàm x lý
này có khai báo nh sau:
LRESULT CALLBACK
(
HWND hwnd,
// Tham s ch a Handle c a c a s liên
quan
UINT uMsg,
// Tham s ch a s hi u message
WPARAM wParam,
// Tham s b sung th nh t ki u WORD
LPARAM lParam
// Tham s b sung th hai ki u LONG
) ; Hàm tr v m t giá tr có kích th c là 32 bits.
Khi m t u c u x lý ụ c chuy n ụ n c a s d i d ng message,
hàm WindowProc g n v i c a s s c n c trên s hi u message
(uMsg) ụ ch n x lý phù h p. Theo ngun t c, n u message ụ c
x lý hồn t t thì hàm tr v giá tr 0, ng c l i (message khơng thu c
4

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -



kh n ng x lý c a c a s ) hàm ph i chuy n message cho windows
x lý thơng qua l i g i hàm x lý message m c nhiên c a windows.
Hàm x lý này có tên g i là DefWindowProc v i khai báo nh sau:
( // Default Window Procedure
LRESULT
HWND
hWnd,
// V i các tham s có ý ngh a nh trên
UINT
Msg,
WPARAM wParam,
LPARAM lParam
);
Khi ụó, k t qu tr v c a DefWindowProc ụ c dùng làm k t qu
c a hàm WindowProc. Qui t c nói trên c n ph i ụ c ụ m b o, n u
khơng, ng d ng có th làm r i lo n ho t ụ ng c a h ụi u hành
windows.
1.7
:
Message queue là danh sách th t các message do windows t o ra
và ụ c dùng ụ ch a các message ụang ch ụ c x lý. Message
queue ho t ụ ng theo ngun t c FIFO (First-In, First-Out: vào tr c, ra
tr c). Có hai lo i message queue trong windows:
̇ Message queue c a h th ng (system queue): Ð c windows dùng
riêng cho vi c l u tr các messge ụ c t thơng tin nh p-xu t liên quan
ụ n thi t b ph n c ng trong q trình h th ng giao tác v i ng i
dùng.
̇ Message queue c a ng d ng (application queue): Ð c windows t o
ra và c p cho các th hi n c a ng d ng. Windows t ụ ng ụi u ph i

các message t system queue sang application queue m t cách phù
h p, nh ụó m i ng d ng có th ti p nh n và th c hi n các u c u
x lý c a ng i dùng thơng qua h th ng. C ch này ng n các ng
d ng trong windows quy n truy c p tr c ti p các thi t b ph n c ng
c a máy tính.
Q Vi c truy c p message queue c a ng d ng ụ c th c hi n v i s h
tr c a các hàm liên quan do windows cung c p nh sau:
̇ Ch và l y m t message t message queue c a ng d ng:
(
BOOL
LPMSG lpMsg,
// Con tr ụ n bi n MSG nh n thơng tin
// Handle c a c a s liên quan
HWND hWnd,
wMsgFilterMin, // S hi u message nh nh t nh n ụ c
UINT
UINT
wMsgFilterMax // S hi u message l n nh t nh n ụ c
);
Hàm t ụ ng ch ụ n khi phát hi n có message c n x lý trong
message queue. Khi ụó, message vào tr c nh t s ụ c l y ra kh i
hàng ch và thơng tin c a nó ụ c ụi n vào bi n ki u MSG ch b i
Một số khái niệm lập trình trong môi trường Windows

5

con tr tham s plMSG. Khi ụã l y ụ c m t message, hàm k t thúc
và tr v m t giá tr ngun. N u message nh n ụ c là message k t
thúc ng d ng (s hi u WM_QUIT) thì hàm tr v giá tr 0. Ng c l i,
hàm tr v giá tr khác 0.

̇ Ki m tra và l y m t message trong message queue c a ng d ng:
(
BOOL
// . Nh
LPMSG lpMsg;
HWND hWnd;
wMsgFilterMin;
UINT
UINT
wMsgFilterMax;
wRemoveMsg; // Có th c hi n xóa message khơng ?
UINT
// PM_NOREMOVE: khơng xóa
);
Hàm tr v giá tr 0 n u message queue r ng. Ng c l i, hàm tr v
m t giá tr khác khơng và thơng tin v message ụ c ụi n vào bi n
ki u MSG ụ c ch b i tham s ki u con tr lpMSG.
̇ Di n d ch message c a bàn phím sang mã phím ASCII:
BOOL
(
// con tr ụ n bi n ch a message
CONST MSG *lpMsg;
);
Tham s lpMsg là con tr ch ụ n bi n ki u MSG ch a n i dung ụ c
t message ụ c l y t message queue và c n di n d ch.
Hàm tr v giá tr khác 0 n u message nh n ụ c t ng ng v i m t
thao tác trên bàn phím (nh n phím: WM_KEYDOWN,
WM_SYSKEYDOWN;
thơi
nh n

phím:
WM_KEYUP,
WM_SYSKEYUP) ho c m t message có ý ngh a t ng ụ ng mà
vi c di n d ch sang mã phím ASCII là thành cơng. Khi ụó hàm t ụ ng
t o message WM_CHAR cho phím di n d ch ụ c. Trong các tr ng
h p khác, hàm tr v giá tr 0.

6

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


̇ Ði u ph i message ụ n c a s giao di n chính:
C a s giao di n chính c a ng d ng có th ti p nh n và x lý
c a nó (1.6). Nh v y, ta có
message thơng qua hàm
th ụi u ph i message l y t message queue c a ng d ng ụ n cho
c a s chính x lý. Vi c ụi u ph i ụ c th c hi n thơng qua hàm sau:
LRESULT
(
// Con tr ụ n bi n ch a message
CONST MSG *lpmsg;
);
Tham s lpMSG ch ụ n bi n ki u MSG ch a thơng tin ụ c t
message ụ c ụi u ph i. Hàm ụi u ph i s ch ụ n khi hàm x lý
message WindowProc c a c a s chính x lý xong messge, và l y
giá tr k t thúc c a hàm này làm giá tr tr v c a chính nó.
H Q trình ti p nh n và ụi u ph i x lý message t message queue
c a ng d ng ụ c ti n hành liên t c cho ụ n khi nh n ụ c message
k t thúc ng d ng (WM_QUIT). Q trình này có tên g i là vòng l p

nh n và ụi u ph i message (MessageLoop). Ðo n ch ng trình nh n
và ụi u ph i message trong ng d ng ụ c cài ụ t nh sau:
MSG
;
// bi n ch a n i dung ụ c t message nh n ụ c
while( GetMessage( &msg, NULL, 0, 0 ) != 0 ) {
// N u message nh n ụ c khơng ph i là WM_QUIT
TranslateMessage(&msg); // Di n d ch n u là phím
DispatchMessage(&msg); // Ði u ph i cho c a s chính.
}
1.8
:
Khi ng d ng ụ c th c hi n, windows t o thêm m t ti n trình cho th
hi n m i c a ng d ng, ụ ng th i xây d ng m t message queue dùng
riêng cho th hi n này. Ti u trình chính c a ti n trình ụ c t o ra có
nhi m v th c hi n MessageLoop trên message queue dành cho ng
d ng, ụ ng th i kh i t o các giao di n và ti u trình h tr (n u c n).
Q Các cách x lý c a ti u trình chính khi n m quy n ụi u khi n ng
d ng:
̇ Khơng th c hi n x lý nào c : ng d ng k t thúc.
̇ Th c hi n MessageLoop nh ng khơng t o c a s giao di n chính:
ng d ng ch nh n message nh ng ng i dùng khơng giao tác ụ c.
̇ Kh i t o m t c a s v i hàm x lý message WindowProc và ch n c a
s này làm c a s giao di n chính: Hàm WindowProc c a c a s s
ti p nh n và x lý message ụ c ụi u ph i t MessageLoop c a ti u
trình chính. Ng i dùng có th giao tác và k t thúc ng d ng ụ c.
̇ Nh m c th ba, ụ ng th i t o ra các ti u trình ph c v : ng d ng có
kh n ng ti p nh n và th c hi n ụ ng th i nhi u u c u x lý.

1.9

Ð i v i m t ch ng trình trong windows, ngồi ph n mã l nh c a các
hàm x lý, resource là m t thành ph n khơng kém ph n quan tr ng ch a
các n i dung h tr cho vi c trang trí ho c ph c v cho m t m c ụích ụ c
bi t c a ng d ng. Các n i dung ph bi n trong resource nh sau:
nh nh ụ c t v trí làm vi c c a thi t b liên quan nh
̇
mouse, pen, trackball. Khi ng i dùng tác ụ ng lên nh ng thi t b này
thì windows s d ng cursor ụ ph n ánh hi n t ng ụó.
: T p nh ụi m (pixels) c a m t nh. Các nh ụi m này b trí
̇
theo các dòng và ph i h p làm nên hình nh c a ụ i t ng.
̇
: Thơng tin mơ t khung giao di n v i các ụ i t ng nh p li u
bên trong, là c s ụ t o ra các h p h i tho i trong ng d ng.
: nh nh ụ c dùng ụ ụ c t ch c n ng c a m t ụ i t ng,
̇
ng d ng hay m t n i dung d li u.
(Hypertext Markup Language): Ngơn ng dùng t o ra nh ng tài
̇
li u d ng v n b n v i nh ng ký pháp và k thu t ụ nh d ng mà trình
duy t t ng ng có th th hi n m t cách xúc tích.

Một số khái niệm lập trình trong môi trường Windows

8

7

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -



̇
̇

̇

̇
̇
̇

: M t danh sách các l a ch n x lý mà ng i dùng có th ch n
nh m th c hi n m t x lý xác ụ nh
: B ng ch a các chu i ụ c ụánh d u phân bi t b i các
s hi u và ụ c s d ng nh các thơng báo trong ch ng trình. Vi c
s d ng String Table giúp ng d ng d dàng thay ụ i ngơn ng giao
di n c a nó mà khơng c n ph i có s ch nh s a trên ph n mã l nh.
: T p các nh con xác ụ nh các nút ụ c cài ụ t trên
thanh cơng c c a c a s hay h p h i tho i trong ng d ng. M i nút
này là m t m c ch n (có th thay th m c ch n c a menu) giúp t o ra
các message l nh (WM_COMMAND) v i s hi u phân bi t ụ có th
n ụ nh x lý c n thi t.
: Ph n khai báo các thơng tin liên quan ụ n ng d ng, tác gi .
: Ch a thơng tin v b font ch ụ c l u trong t p tin .
: Bao g m các n i dung khơng thu c các lo i n i
dung resource chu n nói trên. Ng i dùng có th tùy ý cài vào
resource c a ng d ng, ụ ng th i ph i t cài ụ t x lý thích h p cho
các resource này trong ch ng trình.

Một số khái niệm lập trình trong môi trường Windows


9


:

:
2.1
Th vi n MFC c a Microsoft bao g m các l p c b n, cài ụ t b ng
ngơn ng C++, h tr vi c l p trình trong mơi tr ng windows. T các l p
này, MFC xác l p n n t ng hình thành ng d ng c a windows, bao g m
vi c ụ nh ngh a b khung ng d ng, các cơng c chu n và ph bi n ụ
b sung vào b khung nói trên nh m t o ra ng d ng hồn ch nh. V i
MFC, cơng vi c c a ng i l p trình ch còn là vi c l a ch n các thành
ph n c n thi t, ụi u ch nh và ph i h p chúng h p lý ụ có ụ c ng
d ng k t qu mong mu n.
L p trình windows v i MFC và MicroSoft Visual C++ 6.0 (VC) ụ t
ụ c hi u qu cao b i khơng ch khai thác ụ c phiên b n m i nh t c a
MFC mà còn nh n ụ c nhi u ti n nghi l p trình mà VC cung c p. Ðây là
con ụ ng ng n và ụ n gi n, ụ c bi t v i ng i t h c, ụ vi t ng d ng
windows.
2.2
:
MFC là th vi n kh ng l v i kho ng 200 l p ụ i t ng mà vi c hi u
rõ và v n d ng chúng trong m t kho ng th i gian ng n là khơng th
ụ c. M c tiêu c a chúng ta là hi u và v n d ng nh ng thành ph n ph
bi n nh t c a th vi n ụ xây d ng ng d ng thơng th ng. Khi ụã có
kh n ng nh t ụ nh v s d ng MFC thì v i tài li u MSDN, s ch ng khó
kh n gì trong vi c m r ng khai thác th vi n ụ ng d ng tr nên m nh
m và tinh t h n.
Trong nh ng ph n trình bày sau, chúng ta s l n l t ti p nh n h

th ng n i dung h i n ng tính lý thuy t ụ ụ m b o c u trúc ki n th c, và
ph n th c hành ph i h p s giúp chúng ta ki m nghi m và hi u rõ v n
ụ .
2.3 T
:
Theo mơ hình ki n trúc ng d ng windows m c (1.8), vi c gi i quy t
v n ụ trên chính là vi c th c hi n tr l i các câu h i sau ụây:
̇ Làm th nào t o ụ i t ng ti u trình chính c a ng d ng ?
̇ Làm th nào t o ụ i t ng giao di n c a ng d ng ?
̇ Qu n lý t ng tác gi a ụ i t ng ng d ng và ụ i t ng giao di n ?
B ng vi c xem xét các l p MFC liên quan s giúp l n l t lý gi i các
câu h i ụ c ụ t ra. Ti p theo, chúng ta tìm hi u xem nh ng l p nào
c a MFC giúp khai báo ụ i t ng ti u trình trong ng d ng.
10

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

:
2.4 L
CWinThread là m t l p c a MFC, l p ụ i t ng qu n lý ti u trình ụ c
t o ra trong ti n trình c a m t ng d ng ụang ụ c th c hi n. Ti u trình
ụ c qu n lý có th là là ti u trình giao di n ho c ti u trình x lý n i. Các
d ch v c b n ph c v cho qu n lý ti u trình do CWinThread cung c p
thơng qua các thu c tính và hành vi c a nó.
̇ DWORD
: Thu c tính l u s hi u c a ti u trình.
: L u con tr ụ i t ng c a s giao di n
̇ CWnd*
chính c a ti u trình. Khi c a s giao di n chính ch m d t ho t
ụ ng, ti u trình liên quan s k t thúc. N u ti u trình thu c lo i ti u

trình x lý n i thì giá tr này k th a t ti u trình giao di n c p cao
h n.
̇
( ); Hành vi t o l p (constructor) ụ i t ng ti u trình.
( ); Kh i t o thơng s cho ụ i t ng ti u
̇ virtual BOOL
trình và ụ m nh n các x lý b sung khác c a ng d ng. Ð i v i
ti u trình giao di n, hành vi này ụ c dùng ụ kh i t o ụ i t ng
c a s giao di n và gán ụ a ch c a ụ i t ng c a s cho
.
( ); Hành vi k t thúc c a ụ i t ng ti u trình.
̇ virtual int
Thơng qua hành vi này, ụ i t ng qu n lý ti u trình th c hi n hồn
tr các tài ngun c a h th ng mà nó ụã ụ ng ký s d ng.
̇ virtual int
( ); Hành vi dành riêng cho ti u trình giao di n, nó
th c hi n vòng l p nh n message, chuy n message cho hành vi
PreTranslateMessage c a l p. N u hành vi này tr v giá tr 0 thì
message s ti p t c ụ c chuy n ụ n các hàm di n d ch phím
TranslateMessage và hàm ụi u ph i message DispatchMessage.
(MSG *pMsg); Hành vi cho
̇ virtual BOOL
phép can thi p tr c trên các message nh n ụ c t message
queue c a ng d ng. Thơng qua ụó, ti u trình giao di n có th th c
hi n các ti n x lý message ụ c tr ng nh m ụáp ng u c u ụ t
ra cho ng d ng.
H Khi CWinThread ụ c dùng ụ qu n lý ụ i t ng ti u trình chính thì

hàm WinMain (cài s n bên trong l p b i th vi n MFC) t ụ ng th c
hi n các hành vi InitInstance(), Run() và ExitInstance() theo th t .


Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

11


2.5 L
:
CWinApp, k th a t CWinThread, là l p ụ i t ng chun dùng qu n
lý ti u trình giao di n chính c a ng d ng. ng d ng windows ch ụ c
phép s d ng m t ụ i t ng thu c l p này. Ngồi các thu c tính, hành vi
k th a public t CWinThread, CWinApp có các thu c tính và hành vi b
sung sau:
̇ const char*
: L u chu i tên c a ng d ng.
̇ LPTSTR
: L u n i dung chu i tham s dòng l nh.
Tham s dòng l nh là tồn b ph n n i dung mà ng i dùng gõ
vào ngay sau chu i ụ ng d n và tên ch ng trình ng d ng khi
h th c hi n ng d ng. Ð i v i ng d ng có nhi u ch ụ ho t
ụ ng khác nhau thì vi c s d ng tham s dòng l nh là m t c ch
xác l p các giao c gi a ng d ng và ng i dùng ụ ch n ch ụ
s d ng ng d ng thích h p.
: L u giá tr thơng s ụã ụ c dùng ụ kích ho t
̇ int
c a s giao di n chính c a ng d ng.
̇
( ); T o l p ụ i t ng ti u trình chính.
( int nID ); N p cursor t resource c a ng
̇ HCURSOR

d ng vào b nh (n u cursor ch a ụ c n p). nID là s hi u c a
cursor. Hàm tr v giá tr handle qu n lý cursor. Giá tr này có ki u
HCURSOR (handle of cursor) mà windows dùng ụ qu n lý cursor.
( int nID ); N p icon t resource c a ng d ng
̇ HICON
vào b nh . nID là s hi u c a icon. Hàm tr v giá tr handle qu n
lý icon. Giá tr này có ki u HICON (handle of icon).
̇ Hành vi hi n th h p thơng báo và ch nh n ý ki n ng i dùng:
virtual int
(
LPCTSTR lpszPrompt, // N i dung thơng báo
UINT nType,
// D ng h p thơng báo
// S hi u m c giúp ụ (WinHelp)
UINT hlpIndex = 0
);
Hành vi này ụ c kích ho t v i tham s t ng ng m i khi trong
ch ng trình s d ng hàm AfxMessageBox ụ hi n th h p thơng
báo.
(
int
LPCTSTR lpszPrompt, UINT nType, UINT hlpIndex = 0
);
nType: n ụ nh d ng h p thơng báo. Giá tr này là s k t h p gi a
thơng s qui ụ nh bi u t ng hi n th và các nút ch n b trí trong
h p.
:

Giá tr thơng s
Nút ch n b trí trong h p

12

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

MB_OK
MB_OKCANCEL
MB_YESNO
MB_YESNOCANCEL
MB_ABORTRETRYIGNORE
MB_RETRYCANCEL

OK
OK - Cancel
Yes - No
Yes - No - Cancel
Abort - Retry - Ignore
Retry - Cancel



n:
Giá tr thơng s
MB_ICONHAND, MB_ICONSTOP,
MB_ICONERROR
MB_ICONQUESTION

Bi u t

ng


MB_ICONEXCLAMATION, MB_ICONWARNING
MB_ICONASTERISK, MB_ICONINFORMATION
• S
S hi u
IDABORT
IDCANCEL
IDIGNORE
IDNO

Nút ch n
Abort
Cancel
Ignore
No

S hi u
IDOK
IDRETRY
IDYES

:
Nút ch n
OK
Retry
Yes

• Hành vi DoMessageBox ch ng i s d ng tr l i b ng cách
ch n m t nút ch n xác ụ nh trong h p thơng báo. Hành vi k t
thúc v i giá tr tr v là s hi u c a nút ụ c ch n. K th a hành
vi này ụ ch n và th c hi n x lý ụ c tr ng (s d ng d ng h p

thơng báo riêng) cho t t c các l i g i AfxMessageBox trong
ng d ng.
• Hàm AfxMessageBox s d ng DoMessageBox ụ hi n th h p
thơng báo và l y giá tr c a hành vi này làm k t qu tr v c a
nó.
Ví d : AfxMessageBox( "Chao Ban" MB_ICONSTOP | MB_OK, 0 );
H
Hàm trên th c hi n hi n th h p thơng báo v i n i dung là
"Chao Ban" , bi u t

ng

ụi kèm, và nút ch n OK k t thúc.

Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

13


2.6
N:
Trong ph n này, chúng ta th c hi n ng d ng v i ụ i t ng thu c l p
CWinApp qu n lý ti u trình chính. Ð t tên cho d án c a ng d ng là
VD0.
Các b c th c hi n d án VD0 nh sau:
̇ Kh i ụ ng windows v i h ụi u hành Win95 ho c b n m i h n.
̇ T o m i m t th m c ụ ch a các d án. Ví d
.
̇ Th c hi n ng d ng Microsoft Visual C++ 6.0 (VC).
/

t h th ng menu c a VC.
̇ Ch n m c
, ch n trang Projects :
̇ Trong h p h i tho i

Sau ụó ch n

̇ VC hi n th h p h i tho i
ụ thơng báo
.
các thơng tin liên quan ụ n d án v a t o. Ch n
H M t d án ụã ụ c t o ra trên ụ a. V i thơng tin nh p nh trên,

d án m i t o ra có tên là VD0, tồn b ph n ch ng trình
ngu n c a d án ụ c l u trong th m c VD0 thu c th m c
C:\VC6.
Ti p t c th c hi n các b c sau ụ hồn t t d án theo u c u.
̇ Ð ng ký s d ng l p CWinApp c a th vi n MFC: L p CWinApp
c a MFC. B sung t p tin
ụ c khai báo trong
vào d án và dùng t p tin này ụ ng ký các th vi n c n thi t c a
MFC.
Vi c b sung t p tin stdafx.h vào d án ụ c ti n hành nh sau:
/
t h th ng menu c a VC.
• Ch n m c
• Trong h p h i tho i
, ch n trang
:


: Lo i ng d ng th c hi n.
: Ð ng d n th m c c a d án.
: Tên d án.
.

̇ Ti p theo, trong h p h i tho i
.
: T o d án r ng.
: Hồn t t vi c kh i t o d án.
-

Ch n

: Lo i n i dung t p tin (.h).
: B sung t p tin vào d án VD0.
: Tên t p tin (
)
, ti p t c th c hi n các cơng vi c sau.

• So n th o t p tin
, nh p các ụ nh h ng biên d ch và
các ch th s d ng th vi n MFC c n cho d án:
14

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

15



#if !defined( _DU_AN_0_ )
#define _DU_AN_0_
// _DU_AN_0_ giúp trình d ch khơng th c hi n l p ch th

resource và ụ i t ng l p trình t ng ng c a MFC trong d án.
Th c hi n nh sau:
):
- Right-click trên m c tên resource (

#include
#include <afxwin.h>
// th vi n chu n c a MFC
#endif
Sau khi nh p xong n i dung t p tin
, ch n m c
/
(ho c click bi u tu ng trên thanh cơng c ) ụ l u t p tin.
c a d án: T p tin này ch a khai báo
̇ T o t p tin
c a các resource ụ c s d ng trong ng d ng. Khi biên d ch, các
resource này s ụ c nhúng vào t p tin ch ng trình (.EXE). Các
trong d án nh sau:
b c t o t p tin
/
. Trong h p h i tho i
, ch n trang
• Ch n m c
.


- Ch n m c

:

Ch n các m c nh trên, gõ phím
ụ k t thúc.
ch a c n s d ng resource, t p
• So n th o resource: D án
tin resource script s t m th i b tr ng. Ch n m c
/
,
và ụóng màn hình so n th o resource ụ k t thúc b c này.
̇ Ch n phiên b n biên d ch: Có hai phiên b n biên d ch ch ng
trình.
: Biên d ch ch ng trình v i thơng tin

debug.
: Phiên b n ụem giao, khơng ch a thơng

tin debug.
Ch n m c
/
:
Sau ụó ch n
.
• Ð ng ký các h tr c a
ụ ng ký này là c s
16

: Lo i n i dung t p tin (.rc).

: B sung t p tin vào d án.
: Tên t p tin, trùng v i tên c a d án.
MFC cho thao tác trên resource: Vi c
t o quan h gi a các n i dung c a

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

Ch n phiên b n biên d ch ( ch ng h n
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

). Ch n

.
17


̇

n ụ nh biên d ch v i th vi n MFC: Ch n m c

/

Trong h p h i tho i
,
: : Ch n phiên b n n ụ nh (ví d : Win32 Debug ),
: Các n ụ nh chung cho d án.
: Cách liên k t th vi n MFC vào
ng d ng. Có th tùy ch n m t trong hai cách sau:
Ÿ Use MFC in Shared DLL: Ch ng trình s d ng th vi n
MFC theo c ch liên k t ụ ng. T p tin ch ng trình có kích

th c nh nh ng khi th c hi n c n có các t p tin th vi n
(DLL) c a MFC trong th m c h th ng c a windows.
Ÿ Use MFC in Static Library: Th vi n MFC ụ c nhúng vào
ch ng trình trong lúc biên d ch. T p tin ch ng trình có kích
th c l n h n nh ng ng d ng có th ho t ụ ng ụ c l p.
.
Sau khi n ụ nh xong, ch n
̇ Khai báo ụ i t ng thu c l p CWinApp: Dùng b t k t p tin CPP
nào c a d án ụ th c hi n cơng vi c này. Vì d án VD0 ụang th c
hi n ụây ch a có t p tin CPP, chúng ta t o m i t p tin CPP cho
d án. Gi s t p tin CPP này có tên là MAIN.CPP. Cách th c hi n
nh sau:
• Ch n m c
/
. Trong h p h i tho i
, ch n trang
:
18

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

: Lo i n i dung t p tin (.cpp).
: B sung t p tin vào d án.
: Tên t p tin (MAIN). Sau ụó ch n
.
, nh p n i dung t p tin:
• Trong màn hình so n th o c a
#include "stdafx.h" // T p tin ch a ụ ng ký th vi n c a MFC
CWinApp
; // Ð i t ng qu n lý ti u trình chính

Sau khi nh p xong, ch n m c
/
ụ l u t p tin.
̇ Biên d ch ch ng trình: Ch n m c
/
ho c ch n m c trên thanh cơng c .
Ta ụã th c hi n xong m t ng d ng ụ n gi n trong mơi tr ng
windows. T p tin ch ng trình ụ c l u trong th m c DEBUG
(phiên b n biên d ch debug) ho c RELEASE (phiên b n biên d ch
release).
̇ Ch y ch ng trình: Có th ch y ch ng trình tr c ti p trong VC
b ng cách nh n phím F5 ho c click ch n trên thanh cơng c .
: ng d ng VD0 khơng th c hi n m t giao tác hay cơng vi c
gì c b i nó ch là m t ng d ng khung - ụ c xây d ng hồn tồn t
l p CWinApp c a MFC mà khơng có m t x lý b sung nào.
2.7
N:
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

19


Trong ph n này ta thi t k m t ng d ng mà khi th c hi n s hi n th
và các nút ch n
h p thơng báo "Do You want to Stop" v i bi u t ng
YES- NO. ng d ng k t thúc khi ng i dùng ch n m c YES.
Nh n xét: ng d ng ch hồn thành cơng vi c xác ụ nh khi ụ i t ng
qu n lý ti u trình chính c a ng d ng ti n hành x lý thích h p. Ð i t ng
này thu c l p k th a t l p CWinApp v i x lý b sung nh m th c hi n
c a CWinApp là hành vi

cơng vi c mong mu n. Hành vi
thích h p cho vi c k th a và th c hi n các b sung này.
Gi s d án c a ng d ng có tên là
. Các b c th c hi n nh
sau:
̇ T o d án VD01 theo các b c nh d án VD0 nh ng d ng l i
" (khơng th c hi n
b c "
b c này). Ti p t c th c hi n các b c sau ụây.
̇ T o m i l p
k th a t CWinApp: M màn hình
c a d án (n u ch a m ) b ng cách ch n m c menu
/
ho c click ch n bi u t ng trên thanh cơng c .
• Ch n trang
:

• Right-click trên m c
, ch n
• Khai báo l p CEmpApp thơng qua h p h i tho i

20

.
.

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

Ÿ


= Generic Class: Ch n lo i l p thơng th ng vì
MFC khơng h tr l p CWinApp trong ClassWizard c a nó.
Ÿ
= CEmpApp : Tên c a l p m i.
: n ụ nh tên t p tin ch a khai báo (.h) và cài ụ t
Ÿ
(.cpp) c a l p CEmpApp ( nên trùng v i tên c a d án :
):

.
Sau ụó ch n
= CWinApp : Ch n CWinApp làm l p c s .
Ÿ
Ÿ
= public : K th a public. Ch n
ụ k t thúc.
• L p CEmpApp ụã ụ c b sung vào d án VD01 cùng v i hai
t p tin là VD01.H và VD01.CPP:
Ÿ
: Ch a n i dung khai báo (header) c a l p.
: Ch a n i dung cài ụ t (implement) c a l p.
Ÿ
Có th m và ch nh s a n i dung các t p tin c a l p b ng cách
c a màn hình
thao tác tr c ti p trên c u trúc
.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

21



̇ Kh i t o thơng tin
: Thao tác này là c s ụ khai thác
ti n ích c a ClassWizard trong vi c ụ nh ngh a l p, khai báo thơng
tin k th a, n ụ nh x lý message, ụ nh ngh a bi n,.
• Ch n menu
/
:

• Ch n
• Ði u ch nh l p
Ÿ M t p tin
dung:

:

ụ nh n ụ c h tr c a ClassWizard:
ch a khai báo c a l p, b sung các n i

class CEmpApp : public CWinApp {
Ph n b sung
public:
();
virtual ~
();
//{{AFX_VIRTUAL(CEmpApp)
//}}AFX_VIRTUAL
// H tr k th a hành vi o
//{{AFX_MSG(CEmpApp)
//}}AFX_MSG

// H tr
n ụ nh x lý

message
DECLARE_MESSAGE_MAP() // Ð ng ký MessageMap

}

L u ý:
Ÿ M t p tin
dung:

là ký pháp s d ng c a ClassWizard.
ch a cài ụ t c a l p, b sung n i

#include "stdafx.h"
B sung
#include "Emp.h"
BEGIN_MESSAGE_MAP(CEmpApp, CWinApp)
//{{AFX_MSG_MAP(CEmpApp)
// B ng message map,
//}}AFX_MSG_MAP
// s ụ c p ụ n các
END_MESSAGE_MAP()
// ph n sau

22

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


, sau ụó ch n
.
Ch n
• Trong h p h i tho i
, Ch n
ụ k t thúc.
ụ c l u trong t p tin có cùng tên v i tên
Thơng tin
.
c a d án và ph n m r ng là .
c a l p CWinApp cho l p
.
̇ K th a hành vi
Dùng hành vi này cài ụ t x lý b sung nh u c u c a ng d ng:
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

23


• Trong màn hình
click trên tiêu ụ c a l p

c a d án, ch n
:

, right-

// Bi n ki m tra ụ ng ý d ng?

UINT stop;


do {
stop = AfxMessageBox( "Do You want to stop",
MB_YESNO | MB_ICONQUESTION, 0 );
} while (stop == IDNO );
// Ti p t c l p n u ch n NO
return TRUE;
// X lý ti n hành bình th ng
}
̇ Dùng l p CEmpApp khai báo ụ i t ng qu n lý ti u trình chính c a
ng d ng: M t p tin
c a l p CEmpApp, b sung n i
dung:
#include "stdafx.h"
#include "Emp.h"
CEmpApp
;

• Ch n m c

̇ Biên d ch và ch y ch

// Ð i t ng ki u CEmpApp, dùng qu n lý
// ti u trình chính c a ng d ng.
// Khơng ch nh s a các n i dung khác!
ng trình.

:
2.8 T
Ð i v i ng d ng trong windows, icon khơng ch là hình nh trang trí

ụ n thu n mà còn là y u t g i nh v ng d ng t t nh t. Windows s
d ng icon c a ng d ng ụ ụ i di n cho ng d ng t t c nh ng n i nào
mà ng i dùng có th nhìn th y và khai thác ng d ng.

̇ M d án trong VC.
̇ M màn hình Workspace c a d án, ch n trang ResourceView.
right-click trên tiêu ụ resource c a d án.

, sau ụó ch n m c
• Ch n hành vi
• Trong ph n so n th o n i dung c a hành vi
, ta cài ụ t ụo n ch ng trình x lý sau:
l p
BOOL CEmpApp::
{
24

.
thu c

()

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

25


̇ Ch n m c


...

̇ Th c hi n n ụ nh thơng s c a icon thơng qua h p h i tho i sau:

- ID

̇ Ch n m c
Ta nh n ụ

̇

26

, sau ụó ch n
:
c màn hình thi t k icon. V icon có n i dung tùy ý.

n ụ nh các thơng s
thu c tính c a icon (s
hi u icon, tên th m c
và tên t p tin ch a
icon) trong d án: Ch n
trong
c a d án,
rigth-click trên icon m i
thêm.
Ch n m c
.


Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

: S hi u icon.
là s hi u qui c
dùng cho icon chính c a ng d ng.
: Tên t p tin ch a icon.
là th m c con s ụ c
t o trong th m c d án ụ ch a các t p tin
resource.
ụ k t thúc.
Sau khi n ụ nh xong, gõ phím
̇ Ðóng màn hình thi t k icon resource.
xem t p tin VD01.exe
̇ Biên d ch d án. Dùng
trong th m c debug c a d án. Lúc này, ng d ng VD01 ụã có
icon riêng.
2.9 L
N:
Sau khi hồn t t d án, m t vi c r t th ng xun là l u gi l i
ch ng trình ngu n c a d án. Cơng vi c này ụòi h i ph i lo i b kh i
th m c d án các t p tin khơng c n thi t. Ðó là các t p tin sau:
̇ Th m c d án : Các t p tin .NCB, .PLG, .OPT, .APS.
̇ Th m c Debug : T t c các t p tin, tr t p tin .exe c n gi a l i.
̇ Th m c Release
: T t c các t p tin, tr t p tin .exe c n gi a
l i.
2.10 L
:
CString là l p ụ i t ng c a MFC cho phép qu n lý m t n i dung
chu i trong b nh v i nh ng ụ c tính u vi t sau:

- N i dung chu i l u tr có ụ dài l n v i c ch s d ng b nh t i
u.
- Xây d ng d a trên ki u TCHAR nên thích nghi v i b mã
UNICODE.
- Các hành vi x lý s n sàng cho các tác v chu i thơng th ng.
M t s hành vi ụ c s d ng ph bi n c a CString nh sau:
( ); Hành vi t o l p ụ i t ng chu i.
̇
̇ int
( ) const; Tr v s ụo chi u dài chu i.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows

27


̇
̇
̇
̇
̇
̇
̇
̇
̇
̇
̇
̇
̇
̇
̇

̇

void
( ); Xóa r ng n i dung ụ i t ng chu i.
( ) const; Tr v TRUE n u n i dung chu i là r ng.
BOOL
v trí nIndex.
TCHAR operator ( int nIndex ) const; Tr v ký t
void
( int nIndex, TCHAR ch ); Ð t ký t ch vào v trí nIndex.
( ) const; Chuy n v ki u chu i c a C.
operator
CString::operator = ; Phép tốn gán chu i cho ụ i t ng.
CString::operator + ; Phép tốn c ng chu i.
; Phép tốn n i chu i m i vào ụ i t ng.
CString::operator
CString Comparison
; Trong ụó
là phép tốn
quan h thơng th ng nh : == , < , <= , > , >= , !=.
( int nFirst [, int nCount] ) const; Trích chu i con gi a.
CString
( int nCount ) const; Trích chu i con bên trái.
CString
( int nCount ) const; Trích chu i con bên ph i.
CString
H nCount là chi u dài (s ký t ) c a chu i con ụ c trích ra.
void
( ) / void
( ); Vi t hoa / th ng n i

dung.
void
( LPCTSTR lpszFormat, ... ); T o n i dung cho chu i.
( ) / void
( ); H y kho ng tr ng trái / ph i.
void
( UINT nID ); Gán n i dung cho chu i b i m t
BOOL
h ng chu i trong string table resource. nID là s hi u c a h ng
chu i.

:
1. Vi t ng d ng cho phép hi n th ụ ng d n ụ n t p tin ch ng trình và
chu i tham s dòng l nh th c thi nó.
2. Vi t
ng d ng có cài ụ t DoMessageBox sao cho hàm
AfxMessageBox s d ng trong ng d ng hi n th h p thơng báo v i icon
riêng c a ng d ng.
HD: S d ng hàm: int
( LPMSGBOXPARAMS pMsg
);
typedef struct {
UINT
cbSize;
// Kích th c, = sizeof( MSGBOXPARAMS )
HWND
hwndOwner; // Handle c a c a s cha, có th = NULL
HINSTANCE hInstance;
//
Handle

ng
d ng
=
AfxGetInstanceHandle()
LPCTSTR
lpszText;
// N i dung chu i thơng báo
LPCTSTR
lpszCaption; // N i dung chu i tiêu ụ
DWORD
dwStyle;
// D ng h p, ch a thơng s MB_USERICON
LPCTSTR
lpszIcon;
// Chu i tên icon ụ c hi n tr trong h p
DWORD_PTR dwContextHelpId;
// S hi u giúp ụ
MSGBOXCALLBACK lpfnMsgBoxCallback; // Hàm x lý
DWORD
dwLanguageId;
// S hi u ngơn ng s d ng
}
,*
;
28

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


̇ C u trúc qu n lý 1 ụi m:

typedef struct _POINT {
// T a ụ ( hồnh ụ , tung ụ ) c a ụi m
int x, y
}
;
̇ C u trúc qu n lý 1 vùng hình ch nh t:
typedef struct _RECT {
int top, left;
// T a ụ góc trái trên hình ch nh t.
int right, bottom; // T a ụ góc ph i d i hình ch nh t.
;
}
̇ C u trúc qu n lý chi u r ng và chi u cao vùng hình ch nh t:
typedef struct _SIZE {
// Chi u r ng, chi u cao vùng hình ch
int cx, cy;
nh t.
}
;

:

A:
3.1
Ð h tr
ng d ng trong vi c trang trí giao di n ụ h a (Graphic
Device Interface - GDI) nh màn hình, máy in., windows cung c p m t
h th ng các cơng c ụ h a c b n nh sau:
̇ Pen : Cơng c v ụi m ho c ụ ng th ng.
̇ Brush : Cơng c tơ màu.

̇ Font : Cơng c qui ụ nh ki u ký t cho n i dung v n b n.
̇ Bitmap : Cơng c qu n lý vùng nh ụi m.
̇ Palette : Cơng c qu n lý b màu hi n th .
̇ Region : Cơng c qu n lý vùng hi n th có d ng b t k .
Thơng qua các cơng c nói trên, ng d ng trong windows có th th c
hi n các tác v ụ h a c b n m t cách d dàng mà khơng ph i b n tâm
ụ n c u trúc v t lý c a thi t b hi n th . Các cơng c này g i là cơng c
GDI.
:
3.2
Vi c khai thác kh n ng c a các cơng c GDI ụ c th c hi n thơng
qua m t c u trúc ch a thơng tin qu n lý thi t b hi n th : Device Context
(DC). T i m i th i ụi m, m i DC ụ c phép g n v i m t thi t b hi n th
ụ h a và s d ng m t b các cơng c GDI duy nh t. Mu n s d ng m t
cơng c GDI m i thì DC ph i ch m d t s d ng cơng c t ng ng mà
nó ụang dùng.
M i khi m t DC ụ c t o m i, h th ng t ụ ng chu n b m t b cơng
c GDI (tr bitmap) m c nhiên cho nó. ng d ng có th tùy nghi thay ụ i
các cơng c này cho phù h p v i nhu c u c a ng d ng.
3.3. T
A:
Vi c ụ nh v trên giao di n ụ h a ụ c th c hi n d a trên h tr c t a
ụ có g c (0,0) là góc trái-trên (top-left corner) c a giao di n ụ h a,
chi u d ng c a tr c hồnh (tr c x) h ng t trái sang ph i, chi u d ng
c a tr c tung (tr c y) h ng t trên xu ng d i. Trên m t ph ng giao
di n ụ h a ụó:
̇ Ði m: Bi u di n b ng c p t a ụ (x,y).
̇ Hình ch nh t: Bi u di n b ng c p ụ nh góc trái trên và góc ph i
d i.
Thơng tin v ụi m, vùng hình ch nh t và kích th c c a các ụ i

t ng trong m t ph ng giao di n ụ h a ụ c ụ c t thơng qua các c u
trúc sau:
Các lớp giao diện đồ họa của MFC

29

3.4
:
MCF cung c p m t h th ng phong phú các l p v i ụ y ụ ch c n ng
nh m h tr ng i dùng t i ụa trong l p trình GDI. V i vi c v n d ng k
thu t OOP trên các l p GDI c a MFC, ng i dùng d dàng t o ra ng
d ng mong mu n mà khơng ph i vi t q nhi u mã l nh trong ch ng
trình.
ụi
t:
3.4.1
̇
: L p ụ i t ng ụi m, t ng ng v i c u trúc POINT.
: L p ụ i t ng vùng hình ch nh t trên giao di n ụ h a,
̇
t ng ng v i c u trúc RECT. CRect có các hành vi ụ c tr ng sau:

( ); T o l p ụ i t ng vùng hình ch nh t r ng.
(int left, int top, int right, int bottom); T o l p ụ i t ng

vùng hình ch nh t có thơng s xác ụ nh.
( ) const; Tr v ụ r ng vùng hình ch nh t.
• int
• int
( ) const; Tr v ụ cao vùng hình ch nh t.

( ); H p lý hóa các thành ph n t a ụ c a
• void
rect mà khơng làm thay ụ i v trí và kích th c c a nó.
VD: Gi s kh i t o m t rect khơng h p l nh sau:
CRect rect( 100, 0, 0, 50 ); // rect.left = 100 > rect.right = 0
rect. NormalizeRect();
rect tr nên h p l v i: rect ( 0, 0, 100, 50 );
: L p ụ i t ng kích th c, t ng ng v i c u trúc SIZE.
̇
:
3.4.2 L
CPen là l p ụ i t ng qu n lý pen, m t cơng c GDI quan tr ng c a
DC. Thơng qua ụ i t ng này, DC có th thay ụ i màu s c, nét v c a
30

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


ụi m hay ụ ng th ng mà DC s tr c hi n. CPen có các hành vi ụ c
tr ng sau:
( ); T o l p ụ i t ng pen r ng. Chúng ta ph i kh i t o tham
̇
s cho ụ i t ng này tr c khi s d ng.
̇
(
// T o l p ụ i t ng pen v i tham s
int nPenStyle,
// Ki u nét v
int nWidth,
// Ð r ng nét v (=1: m c nhiên)

COLORREF crColor // Màu s c c a nét v
);
nPenStyle có th nh n m t trong các giá tr sau:
PS_SOLID :
PS_DASH :
PS_DOT :
PS_DASHDOT :
crColor có th nh n giá tr t macro ph i màu RGB( ) nh sau:
RGB (int màu_ụ , int màu_xanh_lá_cây , int màu_xanh_d ng
)
M i màu ụ c ụ c tr ng b ng m t giá tr trong ụo n 0255 ph n
ánh ụ sáng c a nó. B ph i màu theo qui t c ph i màu t
nhiên.
( int nPenStyle, int nWidth, COLORREF crColor
̇ BOOL
); Kh i t o thơng s cho ụ i t ng pen. Ý ngh a tham s nh trên.
̇ operator HPEN() const; Tốn t chuy n ki u, tr v handle c a
pen (HPEN) qu n lý b i ụ i t ng.
3.4.3 L
:
CBrush là l p ụ i t ng qu n lý brush, cơng c GDI c a DC. Thơng
qua ụ i t ng này, DC có th thay ụ i màu s c, d ng c a nét tơ trong
m t vùng hình ch nh t mà DC s tr c hi n. CBrush có các hành vi ụ c
tr ng sau:
( ); T o l p ụ i t ng brush r ng.
̇
̇
( COLORREF crColor ); T o l p ụ i t ng brush có màu tơ
t ng ng v i màu qui ụ nh b i tham s crColor.
̇

( int nIndex, COLORREF crColor ); T o l p ụ i t ng brush
có màu tơ crColor, và nét tơ nIndex.
Giá tr nét tơ có th là: HS_VERTICAL (ụ ng k s c ụ ng),
HS_HORIZAONTAL (ụ ng k s c ngang).
( COLORREF crColor ); T o ụ c tính tơ
̇ BOOL
ụ c v i màu crColor cho ụ i t ng brush ch a có thơng s .
̇ operator HBRUSH() const; Tốn t chuy n ki u, tr v handle c a
brush (HBRUSH) qu n lý b i ụ i t ng.
3.4.4 L p
:
CFont là l p ụ i t ng qu n lý font, cơng c GDI c a DC. Thơng qua
ụ i t ng này, DC th c hi n n ụ nh font, ki u dáng, kích th c c a b ký
Các lớp giao diện đồ họa của MFC

31

t ụ c s d ng cho vi c hi n th các n i dung v n b n. Các hành vi ụ c
tr ng:
( ); T o l p ụ i t ng font r ng.
̇
̇
(const LOGFONT* lpLogFont ); T o l p ụ i t ng font v i
thơng s ụ y ụ . Giá tr thơng s ụ c n ụ nh b i tham s ki u
c u trúc LOGFONT ch a thơng tin. LOGFONT ụ c khai báo nh
sau:
typedef struct tagLOGFONT {
LONG lfHeight;
// chi u cao c a ký t
LONG lfWidth;

// chi u r ng trung bình các ký t
LONG lfEscapement; // góc (1/10) gi a h ng in và tr c X
LONG lfOrientation;
// góc (1/10) gi a ký t và tr c X (No 9x)
LONG lfWeight;
// m c ụ ụ m c a font ch (0 - 1000)
BYTE lfItalic;
// = TRUE : Ch nghiêng
BYTE lfUnderline;
// = TRUE : Ch g ch d i
BYTE lfStrikeOut;
// = TRUE : Ch g ch ngang thân
BYTE lfCharSet;
// b ký t (=DEFAULT_CHARSET )
BYTE lfOutPrecision; // = OUT_DEFAULT_PRECIS
BYTE lfClipPrecision; // = CLIP_DEFAULT_PRECIS
BYTE lfQuality;
// = DEFAULT_QUALITY
BYTE lfPitchAndFamily; // =DEFAULT_PITCH|FF_DONTCARE
TCHAR lfFaceName[LF_FACESIZE]; // Chu i tên c a font
}
;
H Win9x ch dùng lfEscapement.
̇ int
( LOGFONT * pLogFont ); L y thơng tin c a font
qu n lý b i ụ i t ng font ch . K t qu ụ c ụi n vào bi n ki u
LOGFONT ch b i tham s ki u con tr LOGFONT* : pLogFont.
̇ operator HFONT( ); Tốn t chuy n ki u, tr v handle c a font
ụ c qu n lý b i ụ i t ng.
̇ BOOL

( LOGFONT *lpLogFont ); Kh i t o thơng
s cho ụ i t ng font t thơng tin l u trong c u trúc ch b i
lpLogFont.
3.4.5 L p
:
CBitmap là l p ụ i t ng qu n lý bitmap, m t cơng c GDI quan tr ng
giúp qu n lý vùng nh ụi m (pixels) c a DC. Thơng qua ụ i t ng này,
DC có th d dàng t o n i dung trang trí trên giao di n ụ h a t n i
dung nh có s n ụ c l u trong t p tin, ụ ng th i th c hi n các tác v x
lý nh c b n trên n i dung ụó. CBitmap cung c p các hành vi ụ c tr ng
sau:
( ); T o l p ụ i t ng bitmap r ng.
̇
32

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


̇ BOOL
( UINT nIDResource ); T o n i dung cho ụ i
t ng bitmap v i thơng tin ụ c l y t m t nh trong resource.
nIDResource : s hi u c a nh bitmap trong resource c a ch ng
trình.
̇ BOOL
(
CDC* pDC, // Con tr ụ i t ng DC t ng ng
int nWidth,
// Chi u r ng,
int nHeight
// chi u cao tính b ng pixel c a bitmap ụ c t o.

); T o n i dung cho ụ i t ng bitmap v i thơng tin v màu s c, ụ
phân gi i t ng ng v i DC ch b i con tr tham s pDC.
̇ int
( BITMAP* pBitMap ); L y thơng tin v bitmap ụ c
qu n lý b i ụ i t ng. K t qu nh n ụ c s ụ c ụi n vào bi n có
ki u BITMAP ch b i tham s ki u con tr BITMAP* : pBitmap.
C u trúc
bao g m các tr ng có ý ngh a nh sau:
typedef struct tagBITMAP { /* bm */
int bmType ;
// Ki u bitmap,
int bmWidth ;
// Chi u r ng bitmap tính b ng pixel
int bmHeight ;
// Chi u cao bitmap tính b ng pixel
int bmWidthBytes ;
// Kích th c 1 dòng pixel trong bitmap
BYTE bmPlanes ;
// S màu.
BYTE bmBitsPixel ;
// S bit màu c a 1 pixel
LPVOID bmBits ;
// Ð a ch vùng nh ch a pixel c a
bitmap
}
;
̇ operator
() const; Tốn t chuy n ki u, tr v handle c a
bitmap ụ c qu n lý b i ụ i t ng.
3.4.6 L p

:
CPalette là l p ụ i t ng qu n lý palette, m t cơng c GDI c a DC.
Thơng qua ụ i t ng này, DC có th t o ra các hi u ng màu trên giao
di n ụ h a b ng cách thay ụ i các b màu m t cách phù h p.
̇
( ); T o l p ụ i t ng palette r ng.
̇
( LPLOGPALETTE lpLogPalette ); Kh i t o thơng s
cho ụ i t ng palette r ng. Con tr tham s lpLogPalette ch ụ n
bi n ki u c u trúc LOGPALETTE ch a thơng tin b màu dùng kh i
t o.
{
typedef struct tag
// S hi u palette h th ng
WORD palVersion;
WORD palNumEntries;
// S màu s d ng
PALETTEENTRY palPalEntry[1]; // Ch a các giá tr màu,
// có s ph n t m ng b ng palNumEntries
} LOGPALETTE ;
Các lớp giao diện đồ họa của MFC

33

H M i ph n t c a palPalEntry có ki u PALETTEENTRY ph n ánh
giá tr màu dùng hi n th màu ch m c (color index) t ng ng v i v
trí th t c a nó. C u trúc PALETTEENTRY có n i dung nh sau:
typedef struct tagPALETTEENTRY {
BYTE peRed ;
// Giá tr thành ph n màu ụ

BYTE peGreen ;
// Giá tr thành ph n màu xanh lá cây
BYTE peBlue ;
// Giá tr thành ph n màu xanh d ng
BYTE peFlags ;
// Vai trò màu trong h th ng.
}
;
̇ operator
( ) const; Tốn t chuy n ki u, tr v handle
c a palette qu n lý b i ụ i t ng.
:
3.4.7 L
CRgn là l p ụ i t ng qu n lý region, m t cơng c GDI quan tr ng
giúp DC n ụ nh vùng nh x lý có hình d ng tùy ý trên giao di n ụ h a
c a nó.
̇
( ); T o l p ụ i t ng vùng nh r ng.
̇ BOOL
( int x1, int y1, int x2, int y2 ); Kh i t o thơng
s cho ụ i t ng vùng nh b ng 1 hình ch nh t v i t a ụ góc trái
trên và góc ph i d i l n l t là (x1, y1) và (x2, y2).
̇ BOOL
( int x1, int y1, int x2, int y2 ); Kh i t o
thơng s cho ụ i t ng vùng nh b i hình ellipse n i ti p hình ch
nh t có góc trái trên (x1, y1) và góc ph i d i (x2, y2).
̇ BOOL
(
LPPOINT lpPoints, // M ng ch a t a ụ các ụi m ziczac
int nCount,

// S ph n t POINT trong m ng trên
int nMode
// = WINDING
);
Kh i t o thơng s cho ụ i t ng vùng nh b i m t ụ ng ziczac
khép kín qua các ụi m có t a ụ xác ụ nh và ụ c l u trong m t
m ng.
(
int
CRgn* pRgn1, // Con tr ụ i t ng qu n lý vùng nh th nh t
CRgn* pRgn2, // Con tr ụ i t ng qu n lý vùng nh th hai
int nCombineMode
// Cách k t h p hai vùng nh
); T o thơng s cho ụ i t ng vùng nh trên c s k t h p hai vùng
nh ụã có. Tham s nCombineMode có th là:
RGN_AND : Vùng nh k t qu là vùng giao nhau gi a hai vùng
nh.
RGN_OR : Vùng nh k t qu là vùng h p gi a hai vùng nh.
RGN_DIFF : Vùng nh k t qu là vùng bù gi a hai vùng nh.
34

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


̇ operator HRGN() const; Tốn t chuy n ki u, tr v handle c a
vùng nh qu n lý b i ụ i t ng.
:
CDC là l p ụ i t ng qu n lý DC. Thơng qua ụ i t ng DC, kh n ng
c a các cơng c ụ h a ụ c khai thác cho vi c trang trí giao di n ụ
h a qu n lý b i DC. CDC có các hành vi ụ c tr ng nh sau:

( ); T o l p ụ i t ng DC r ng.
̇
̇ virtual BOOL
( CDC* pDC ); Kh i t o thơng
s cho ụ i t ng DC m t cách t ng thích v i m t DC có s n ụ c
ch b i con tr tham s pDC.
̇ virtual BOOL
( ); H y b ụ i t ng DC.
( CPen* pPen ); Ch n cơng c v m i cho DC.
̇ CPen*
pPen : con tr ụ n ụ i t ng pen s ụ c dùng cho DC.
Hàm tr v con tr ch ụ n ụ i t ng pen mà DC ụang s d ng.
H Có th s d ng hành vi này cho các cơng c trang trí khác c a
DC. K t qu tr v là con tr ụ n ụ i t ng ụang dùng t ng ng.
̇ CPent*
( ); Tr v giá tr con tr c a ụ i t ng pen
ụang ụ c s d ng b i DC.
H M t cách t ng t cho các cơng c trang trí khác.
( COLORREF crColor ); Ð t màu
̇ virtual COLORREF
n n cho DC. crColor là giá tr màu ụ t.
( ); Tr v giá tr màu n n c a DC.
̇ COLORREF
̇ virtual COLORREF
( COLORREF crColor ); n ụ nh
màu ụ c s d ng ụ hi n th các n i dung v n b n trên DC.
̇ COLORREF
( ); Tr v giá tr màu hi n dùng ụ hi n
th các n i dung v n b n trên DC.
( int nBkMode ); n ụ nh ch ụ hi n th n n ký t

̇ int
bi u di n n i dung v n b n. nbkMode ch a thơng s n ụ nh:
TRANSPARENT : N n ch hi n th trong su t.
OPAQUE
: Ch hi n th có màu n n.
̇ int GetBkMode( ); L y ch ụ hi n th ch c a DC.
̇ virtual BOOL
(
// T a ụ b t ụ u hi n th
int x, y ,
// N i dung chu i hi n th .
LPCTSTR lpszString,
// Chi u dài chu i.
int nCount
); Hi n th n i dung chu i v n b n lên giao di n ụ h a c a DC.
(
̇ virtual int
LPCTSTR lpszString, // N i dung chu i hi n th
// Chi u dài chu i
int nCount,
// Con tr ụ n bi n ki u RECT
LPRECT lpRect,
Các lớp giao diện đồ họa của MFC

35

̇
̇
̇


̇

̇

̇

36

UINT nFormat
// Ch a thơng tin canh ch nh chu i hi n
th .
); In n i dung chu i lên giao di n ụ h a c a DC v i các canh
ch nh.
lpRect : Ch ụ n bi n ki u RECT ch a thơng tin gi i h n vùng hi n
th .
nFormat : Cho phép k t h p m t cách h p lý các canh ch nh trong
vùng hình ch nh t gi i h n. Các thơng s canh ch nh có th là:
DT_CENTER
: Ch nh gi a theo chi u ngang
DT_VCENTER : Ch nh gi a theo chi u d c
DT_RIGHT
: Ch nh ph i.
( int x, int y ); n ụ nh ụi m v hi n hành.
CPoint
( int x, int y ); V ụ ng th ng t ụi m v hi n hành
BOOL
ụ n ụi m có t a ụ (x, y).
void
(
LPCRECT lpRect, // Con tr ch ụ n bi n ki u RECT.

CBrush* pBrush // Con tr ụ n ụ i t ng brush dùng tơ màu.
); Tơ màu vùng hình ch nh t ụ c xác ụ nh b i các giá tr ch a
trong bi n ki u RECT do tham s lpRect ch ụ n.
// V hình ch nh t 3 chi u
void
// Con tr ụ n bi n RECT
LPCRECT lpRect,
COLORREF clrTopLeft,
// Màu v c nh trái và c nh trên.
COLORREF clrBottomRight // Màu v c nh ph i và c nh d i
);
(
BOOL
LPRECT lpRect,
// Con tr ụ n bi n ki u RECT.
// Cách v trên các g (trong, ngồi) c nh.
UINT nEdge,
UINT nFlags
// Các c nh ụ c v .
); V khung ch nh t v i hi u ng 3 chi u.
nEdge có th k t h p các giá tr sau:
BDR_RAISEDINNER : V n i g trong
BDR_SUNKENINNER : V chìm g trong
BDR_RAISEDOUTER : V n i g ngồi
BDR_SUNKENOUTER
: V chìm g ngồi
nFlags có th k t h p các giá tr sau:
BF_RECT
: V t t c các c nh
BF_TOPLEFT

: V c nh trái và c nh trên
BF_BOTTOMRIGHT
: V c nh ph i và c nh d i
(
BOOL
CPoint pt,
// Ði m ụ t góc trái trên c a nh trên DC
CSize size,
// Kích th c vùng hi n th nh
CBitmap* pBitmap, // Con tr ụ i t ng bitmap ụ c v
Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


UINT nFlags,
CBrush* pBrush

// = DST_BITMAP (v bitmap)
// Con tr ụ i t ng Brush, s d ng khi v
// Bitmap n: nFlags |= DSS_DISABLED
); V bitmap ho c icon lên DC.
(
̇ BOOL
int x, int y,
// T a ụ góc trái trên và
int nWidth, int nHeight,
// kích th c vùng nh n nh.
CDC* pSrcDC,
// Con tr ụ i t ng qu n lý DC ngu n.
// Góc trái trên ph n nh ngu n ụ c
int xSrc, int ySrc,

chép.
// Cách ch p pixel t nh ngu n.
DWORD dwRop
); Ch p n i dung ph n nh b t ụ u t v trí (xSrc,ySrc) trong DC
ngu n sang vùng nh n nh b t ụ u t v trí (x, y), v i kích th c
(nWidth, nHeight) trong DC qu n lý b i ụ i t ng.
Giá tr pixel ụ c chuy n vào vùng nh n nh tùy thu c vào giá tr
tham s dwRop. M t s giá tr dùng cho tham s này có th nh
sau:
• SRCCOPY : Giá tr pixel l y tr c ti p t pixel c a nh ngu n.
• SRCPAINT : Là k t qu OR c a pixel nh ngu n và nh nh n.
• SRCAND
: Là k t qu AND c a pixel nh ngu n và nh
nh n.
(
̇ BOOL
int x, int y,
// T a ụ góc trái trên và
int nWidth, int nHeight, // Kích th c vùng nh n nh
CDC* pSrcDC,
// Con tr ụ i t ng qu n lý DC ngu n
int xSrc, int ySrc,
// Góc trái trên ph n nh ụ c chép
CBitmap& maskBitmap, // Con tr ụ i t ng bitmap m t n
// Góc trái trên vùng nh làm m t n
int xMask, int yMask,
// Cách ch p pixel t nh ngu n.
DWORD dwRop
); T ng t BitBlt nh ng s d ng m t n l c pixel. Ð i t ng
maskBitmap s d ng nh tr ng ụen (monochrome bmp) mà m i

pixel "ụen" s ng n vi c chuy n pixel
v trí t ng ng t DC
ngu n sang DC qu n lý b i ụ i t ng, các v trí khác ụ c chuy n
bình th ng.
(
̇ BOOL
// T a ụ góc trái trên và
int x, int y,
// Kích th c vùng nh n nh.
int nWidth, int nHeight,
CDC* pSrcDC,
// Con tr ụ i t ng DC ngu n.
int xSrc, int ySrc,
// T a ụ góc trái trên và
int nSrcWidth, int nSrcHeight, // Kích th c ph n nh ụ c
chép.
Các lớp giao diện đồ họa của MFC

37

DWORD dwRop
// Cách ch p pixel t nh ngu n.
); T ng t BitBlt nh ng nh ụích và nh ngu n có th có kích
th c khác nhau nên t o hi u ng co dãn nh chép ụ c so v i
nh ngu n.
(
̇ BOOL
int x, int y,
// T a ụ góc trái trên n i ụ t icon trên DC
HICON hIcon

// Handle c a icon
); V icon hIcon lên v trí (x, y) c a DC qu n lý b i ụ i t ng.
:
3.6 L
CImageList là l p ụ i t ng imagelist. M i imagelist cho phép qu n lý
danh sách nh có cùng kích th c và h tr nhi u ti n ích trên chúng.
( ); T o l p ụ i t ng imagelist r ng.
̇
(
̇ BOOL
UINT nBitmapID, // S hi u c a resource bitmap ch a các
nh
// Ð r ng m i nh trong bitmap nói trên
int cx,
int nGrow,
// S nh trong bitmap
COLORREF crMask // Màu m t n (khơng hi n th )
); Kh i t o n i dung cho ụ i t ng t m t bitmap trong resource.
̇ int GetImageCount( ); S nh c a imagelist qu n lý b i ụ i t ng.
(
̇ int
CBitmap* pbmImage, // Con tr ụ i t ng bitmap c a nh
m i.
// Ð i t ng bitmap m t n ho c
CBitmap* pbmMask |
[ COLORREF crMask ] // màu m t n c a nh m i.
); Thêm m t nh (bitmap) vào imagelist.
̇ BOOL
( int nImage, CPoint ptHotSpot ); Chu n b
chuy n nh th nImage trong imagelist v i v trí b t ụ u ptHotSpot.

̇ static BOOL
( CWnd* pWndLock, CPoint point ); C m
c a s pWndLock, n i mà imagelist ụang th c hi n chuy n nh.
(CPoint pt); Chuy n nh nImag ụ n v trí
̇ static BOOL
pt.
( CWnd* pWndLock ); Ch m d t tình tr ng
̇ static BOOL
b c m c a c a s pWndLock.
̇ static void
( ); Ch m d t tác v chuy n nh.
( BOOL bShow ); Hi n th ho c che
̇ static BOOL
nh trong q trình chuy n hình.
(
̇ BOOL
// Ð i t ng DC dùng v hình
CDC* pdc,
// S th t hình ụ c v trong imagelist
int nImage,
POINT pt,
// T a ụ góc trái trên n i v hình
38

Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


×