:
1.1 Chương trình ( Program )
1.2 Ứng dụng ( Application )
1.3 Tiến trình ( Process )
1.4 Tiểu trình (Thread )
1.5 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
1.6 Cửa sổ giao diện (window) của ứng dụng
1.7 Message queue
1.8 Kiến trúc xử lý của ứng dụng trong Windows
1.9 Resource của ứng dụng
:
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
:
3.1 Các công cụ giao diện đồ họa
3.2 Device Context
3.3 Tọa độ trên giao diện đồ họa
3.4 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
Trang
1
1
1
1
1
2
2
2
3
3
3
5
7
8
10
10
10
10
11
12
14
20
25
27
27
29
29
29
29
30
30
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
:
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
:
5.1 Lớp xử lý message CCmdTarget:
5.2 Khai báo mục xử lý message trong MessageMap
5.3 Các lớp kế thừa CCmdTarget
5.4 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
:
6.1 DC và BITMAP
6.2 Ứng dụng với cửa sổ chính hiển thò ảnh
6.3 Sao chép ảnh từø DC đến DC, phóng to & thu nhỏ ảnh
6.4 DC trong bộ nhớ ( DC ảo) – vùng vẽ đệm lý tưởng
6.5 Ảnh chuyển động trong vùng client
6.6 CImageList – công cụ quản lý bộ ảnh cùng cỡ
6.7 CRgn – Cửa sổ có hình dạng tùy ý
:
7.1 Đònh nghóa
7.2 Menu resoure
31
31
32
32
33
34
35
38
40
40
40
49
49
50
51
51
52
55
55
55
58
60
60
60
63
64
65
66
67
69
69
69
7.3 Sử dụng menu resource
7.4 Mục xử lý command message từ mục chọn của menu
7.5 Phím tắt (hot key ) cho mục chọn trên menu
7.6 Lớp quản lý menu – CMenu
7.7 Xử lý điều khiển mục chọn của menu
:
8.1 CStatic
8.2 CEdit
8.3 CButton
8.4 ClistBox
8.5 CComboBox
8.6 CSpinButtonCtrl
8.7 CProgressCtrl
8.8 CscrollBar
8.9 CSliderBar
:
9.1 Hộp hội thoại (Dialog)
9.2 Lớp CDialog
9.3 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
9.4 Liên kết giữa dialog và các thành phần khác
9.5 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
9.6 Khai báo biến cho control trên dialog
9.7 Khai thác các tiện ích hỗ trợ
:
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
71
72
73
75
77
78
78
80
84
85
88
91
93
94
96
97
97
97
99
99
103
104
104
106
106
107
109
112
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 CDocument
11.2 CView
11.3 CFrameWnd
11.4 CDoctemplate
11.5 Hỗ trợ từ phía đối tượng quản lý ứng dụng
11.6 Trình tự tạo lập các đối tượng tham gia bộ DVF
11.7 Text Document Appication
11.8 Rich Text Format (rtf) Document Appication
11.9 HTML Document View Appication
11.10 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
:
12.1 Tập tin INI
12.2 System Registry
12.3 Vùng Status Area trên Taskbar
12.4 Ứ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
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.5.2 Tiểu trình giao diện
12.5.3 Các hàm hỗ trợ
12.6 Lập trình Multimedia với MCI
12.7 Ấn đònh một số tính năng của Windows
12.8 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
12.9 Cài đặt chế độ thực hiện ứng dụng tự động
:
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
177
179
179
181
182
183
183
183
184
185
186
187
187
187
187
189
190
191
192
194
197
197
198
198
199
200
200
200
204
207
215
215
217
219
219
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
:
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
220
223
223
224
225
227
228
229
231
232
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]
,
Windows 95 - Win32 Programming API-BIBLE
,
Waite Group Press 1996.
[2]
,
Programming Windows 95 with MFC
, Microsoft Press.
[3]
,
Professional Visual C++ ISAPI Programming
, Wrox Press.
[4]
,
Microsoft Developer Network - MSDN
,
Microsoft Corporation Software.
[5]
,
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ả: Lê Ngọc Thạnh
- Cơ quan: Khoa Tin Học Quản Lý, Trường ĐHKT TP.HCM
Đòa chỉ
: 279 Nguyễn Tri Phương Q10, TP.HCM.
- Đòa chỉ e-mail:
Một số khái niệm lập trình trong môi trường Windows 1
:
M
1.1
:
Chng trình máy tính là tp hp các ch th ụiu khin hot ụng ca
máy, ục b trí theo mt trình t logic nhm phi hp thc hin mt
cơng vic xác ụnh. Các ch th ục th hin di dng mã ngun
(source code) hay mã máy (machine code). Chng trình mã máy có th
thc hin ục trên máy có b lnh tng thích, vi chng trình mã
ngun thì phi s dng mt ng dng chun dng ụ chuyn sang mã
máy trc khi thc hin.
Vic chuyn các ch th dng mã ngun sang ch th mã máy ụ thc
hin ục tin hành bng mt trong hai c ch sau:
̇ Thơng dch
: Mi ch th mã ngun ục chuyn sang ch th mã máy
tng ng và ục thc hin ngay, sau ụó tip tc vi ch th k tip.
̇ Biên dch
: Tt c các ch th mã ngun ục chuyn sang các ch th
mã máy tng ng. Tp hp các ch th mã máy này gi là chng
trình mã máy. Chng trình mã máy ục lu li trong tp tin chng
trình và v sau ta có th thc hin chúng mt cách ục lp trên máy.
1.2
:
Khi mt chng trình ục cài ụt trên máy tính ụ s dng, ta gi ụó
là ng dng, ví d nh ng dng NotePad, ng dng Microsoft Word,....
Trong mơi trng windows, mi ng dng có th ục thi hành nhiu
ln thành nhiu bn khác nhau. Mi bn ụang thc hin ca mt ng
dng gi là th hin (instance) ca ng dng ụó.
1.3
:
Tin trình là khái nim ch mt instance ụang hot ụng ca ng
dng. Khi ta double-click trên biu tng NotePad ụ chy ng dng
này, ta có mt tin trình ca ng dng NotePad.
1.4
:
Tiu trình là mt nhánh x lý ục lp trong tin trình. Khi mt ng
dng ục thc hin ta có thêm mt tin trình. Do bn cht chng trình
làm nên ng dng ụó bao gm chng trình chính (
hay )
và các chng trình con mà tin trình ng vi nó có th tách thành các
nhánh x lý: mt 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 gi là các tiu trình. Có hai loi tiu
trình:
2 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ Tiu trình giao din (user-interface thread): Có nhim v x lý các u
cu ca ngi dùng trong q trình giao tác vi h.
̇ Tiu trình x lý ni (worker thread)
: Có nhim v thc hin các x lý
tính tốn bên trong, khơng trc tip nhn u cu ca ngi dùng.
Q Thc ra, có th xem tiu trình giao din nh là mt tiu trình x lý ni
nhng có tính nng giao tác vi ngi s dng.
1.5
:
Thơng ụip (message) là giá tr phn ánh mt ni dung giao tip hay
u cu x lý gia h thng (windows) và ng dng, gia các ng dng
vi nhau hoc gia các thành phn trong cùng mt ng dng.
1.5.1
:
C windows và ng dng ụu có th phát sinh message.
̇ Windows phát sinh message khi cn thơng tin cho ng dng các
hot ụng nhp-xut (hot ụng gõ phím, di chuyn hay click chut,
. ca ngi dùng), các thay ụi ca h thng (font ch, ch ụ phân
gii màn hình, màu sc,...) hoc nhng bin ụi khác liên quan ụn
ng dng.
̇ ng dng phát sinh message khi x lý ụiu khin các thành phn
bên trong ng dng phi hp th
c hin chc nng giao tip vi ngi
dùng, hoc khi ng dng thc hin giao tip vi windows hay vi các
ng dng khác ụang thc hin trong cùng h thng.
1.5.2
:
̇
Message ục ụnh ngha bi h thng
: Là các message do h ụiu
hành windows to ra nhm phc v hot ụng ụiu khin tồn b h
thng, x lý thơng tin vào-ra hoc các thơng tin khác cho ng dng.
Khi có nhu cu, ng dng có th s dng nhng message này ụ
phát ụng mt chc nng ụiu khin nào ụó ca windows.
̇
Message ục ụnh ngha bi ngi dùng
: Là các message do ngi
vit ng dng ụnh ngha nhm to kênh liên lc ục thù gia các
thành phn trong ng dng, gia ng dng vi windows hoc vi
các ng dng khác ụang thc hin trong cùng h thng.
Một số khái niệm lập trình trong môi trường Windows 3
1.5.3 S :
Có rt nhiu message khác nhau ục s dng trong mơi trng
windows. ng vi mi message xác ụnh, windows s dng mt giá tr
ngun khơng âm ụ ục t, giá tr này gi là s hiu message.
Các message do windows ụnh ngha có s hiu ục khai báo sn
và duy nht vi các hng s xác ụnh và tên gi gi nh ca chúng có
dng WM_
xxx
. Các messges do ngi dùng ụnh ngha cng phi ụng
ký s hiu. S hiu ụng ký khơng ục trùng lp và có giá tr nh nht
bng WM_USER (mt hng s do windows ụnh ngha).
S hiu message là c s ụ phân bit các message ln nhau.
1.5.4 Ð
:
Ð ụi tng nhn message có thêm thơng tin v hồn cnh phát
sinh và ý ngha c th ca message, windows cho phép message ục
nhn thơng qua mt cu trúc cha s hiu message và các thơng s
kèm theo. Cu trúc này ục khai báo thành kiu MSG vi ni dung nh
sau:
typedef struct
{
HWND
hwnd
; // Giá tr có kích thc 4 bytes (long)
UINT
message
; // S hiu ca message
WPARAM
wParam
; // Giá tr khơng âm có kích thc 2 bytes
LPARAM
lParam
; // Giá tr khơng âm có kích thc 4 bytes
DWORD
time
; // Thi ụim sinh ra messsge
POINT
pt
; // Ta ụ cursor khi message ục gi.
} ;
Trng
hwnd
(window handle) ca cu trúc cha th (handle) qun lý
ca s giao din liên quan ụn message.
wParam
và
lParam
là hai tham
s gi kèm theo message làm nhim v cha thơng tin b sung. Hai
tham s này ục dùng khi message có nhiu ý ngha thc t khác nhau.
H Windows s dng giá tr có kích thc 4 bytes ụ qun lý các ụi
tng ca nó. Giá tr này gi là th qun lý ụi tng (object handle).
ng vi mi loi ụi tng c th, windows s dng mt kiu handle
riêng. HWND là kiu handle dùng qun lý ụi tng ca s giao din
trong windows.
1.6 C
:
Ca s giao din là thành phn quan trng trong vic to ra mơi
trng giao din ụ ha ca các ng dng trong windows. Cùng vi s
phát trin ca h ụiu hành windows, hình nh ca s giao din cng
thay ụi theo vi chiu hng sinh ụng hn v hình thc và phong phú
hn v chc nng. Ðiu ụó khơng ch góp phn tng tính thm m mà
4 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
còn to s gn gi hn gia giao din ca ng dng trong windows vi
ngi dùng.
Dng thơng thng ca mt ca s giao din trong windows:
̇
System Menu Box
: Cha biu tng ca ng dng, là nút m hp
menu h thng vi các mc di chuyn, thay ụi kích thc hoc ụóng
ca s.
̇
Caption bar
: Thanh tiêu ụ ca ng dng.
̇
Menu bar
: H thng menu vi các mc la chn x lý.
̇
Minimize / Maximize Box
: Nút ụiu khin thu nh / phóng to ca s.
̇
Restore Box
: Nút khơi phc kích thc trc ụó ca ca s.
̇
Border
: Ðng vin bao quanh ca s.
̇
Client area
: Vùng làm vic ca ca s, dùng ụ hin th thơng tin.
̇
Scroll bar
: Thanh cun ni dung vùng làm vic ca ca s.
̇
Window Procedure
: Ngồi giao din ụ ha, ca s ca windows có
kh nng tip nhn và x lý message. Kh nng này ục thc hin
thơng qua hàm x lý message mà ta ụã gn cho ca s. Hàm x lý
này có khai báo nh sau:
LRESULT CALLBACK
(
HWND
hwnd
, // Tham s cha Handle ca ca s liên
quan
UINT
uMsg
, // Tham s cha s hiu message
WPARAM
wParam
, // Tham s b sung th nht kiu WORD
LPARAM
lParam
// Tham s b sung th hai kiu LONG
) ; Hàm tr v mt giá tr có kích thc là 32 bits.
Khi mt u cu x lý ục chuyn ụn ca s di dng message,
hàm
WindowProc
gn vi ca s s cn c trên s hiu message
(uMsg) ụ chn x lý phù hp. Theo ngun tc, nu message ục
x lý hồn tt thì hàm tr v giá tr 0, ngc li (message khơng thuc
Một số khái niệm lập trình trong môi trường Windows 5
kh nng x lý ca ca s) hàm phi chuyn message cho windows
x lý thơng qua li gi hàm x lý message mc nhiên ca windows.
Hàm x lý này có tên gi là
DefWindowProc
vi khai báo nh sau:
LRESULT
( // Default Window Procedure
HWND
hWnd
, // Vi các tham s có ý ngha nh trên
UINT
Msg
,
WPARAM
wParam
,
LPARAM
lParam
) ;
Khi ụó, kt qu tr v ca
DefWindowProc
ục dùng làm kt qu
ca hàm
WindowProc
. Qui tc nói trên cn phi ục ụm bo, nu
khơng, ng dng có th làm ri lon hot ụng ca h ụiu hành
windows.
1.7
:
Message queue là danh sách th t các message do windows to ra
và ục dùng ụ cha các message ụang ch ục x lý. Message
queue hot ụng theo ngun tc FIFO (First-In, First-Out: vào trc, ra
trc). Có hai loi message queue trong windows:
̇
Message queue ca h thng (system queue)
: Ðc windows dùng
riêng cho vic lu tr các messge ục t thơng tin nhp-xut liên quan
ụn thit b phn cng trong q trình h thng giao tác vi ngi
dùng.
̇
Message queue ca ng dng (application queue)
: Ðc windows to
ra và cp cho các th hin ca ng dng. Windows t ụng ụiu phi
các message t system queue sang application queue mt cách phù
hp, nh ụó mi ng dng có th tip nhn và thc hin các u cu
x lý ca ngi dùng thơng qua h thng. C ch này ngn các ng
dng trong windows quyn truy cp trc tip các thit b phn cng
ca máy tính.
Q Vic truy cp message queue ca ng dng ục thc hin vi s h
tr ca các hàm liên quan do windows cung cp nh sau:
̇ Ch và ly mt message t message queue ca ng dng
:
BOOL
(
LPMSG
lpMsg
, // Con tr ụn bin MSG nhn thơng tin
HWND
hWnd
, // Handle ca ca s liên quan
UINT
wMsgFilterMin
, // S hiu message nh nht nhn ục
UINT
wMsgFilterMax
// S hiu message ln nht nhn ục
);
Hàm t ụng ch ụn khi phát hin có message cn x lý trong
message queue. Khi ụó, message vào trc nht s ục ly ra khi
hàng ch và thơng tin ca nó ục ụin vào bin kiu MSG ch bi
6 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
con tr tham s
plMSG
. Khi ụã ly ục mt message, hàm kt thúc
và tr v mt giá tr ngun. Nu message nhn ục là message kt
thúc ng dng (s hiu WM_QUIT) thì hàm tr v giá tr 0. Ngc li,
hàm tr v giá tr khác 0.
̇ Kim tra và ly mt message trong message queue ca ng dng
:
BOOL
(
LPMSG
lpMsg
; // . Nh
HWND
hWnd
;
UINT
wMsgFilterMin
;
UINT
wMsgFilterMax
;
UINT
wRemoveMsg
; // Có thc hin xóa message khơng ?
// PM_NOREMOVE: khơng xóa
);
Hàm tr v giá tr 0 nu message queue rng. Ngc li, hàm tr v
mt giá tr khác khơng và thơng tin v message ục ụin vào bin
kiu MSG ục ch bi tham s kiu con tr
lpMSG
.
̇ Din dch message ca bàn phím sang mã phím ASCII
:
BOOL
(
CONST MSG *
lpMsg
; // con tr ụn bin cha message
);
Tham s
lpMsg
là con tr ch ụn bin kiu MSG cha ni dung ục
t message ục ly t message queue và cn din dch.
Hàm tr v giá tr khác 0 nu message nhn ục tng ng vi mt
thao tác trên bàn phím (nhn phím: WM_KEYDOWN,
WM_SYSKEYDOWN; thơi nhn phím: WM_KEYUP,
WM_SYSKEYUP) hoc mt message có ý ngha tng ụng mà
vic din dch sang mã phím ASCII là thành cơng. Khi ụó hàm t ụng
to message WM_CHAR cho phím din dch ục. Trong các trng
hp khác, hàm tr v giá tr 0.
Một số khái niệm lập trình trong môi trường Windows 7
̇ Ðiu phi message ụn ca s giao din chính:
Ca s giao din chính ca ng dng có th tip nhn và x lý
message thơng qua hàm
ca nó (1.6). Nh vy, ta có
th ụiu phi message ly t message queue ca ng dng ụn cho
ca s chính x lý. Vic ụiu phi ục thc hin thơng qua hàm sau:
LRESULT
(
CONST MSG *
lpmsg
; // Con tr ụn bin cha message
);
Tham s
lpMSG
ch ụn bin kiu MSG cha thơng tin ục t
message ục ụiu phi. Hàm ụiu phi s ch ụn khi hàm x lý
message WindowProc ca ca s chính x lý xong messge, và ly
giá tr kt thúc ca hàm này làm giá tr tr v ca chính nó.
H Q trình tip nhn và ụiu phi x lý message t message queue
ca ng dng ục tin hành liên tc cho ụn khi nhn ục message
kt thúc ng dng (WM_QUIT). Q trình này có tên gi là vòng lp
nhn và ụiu phi message (MessageLoop). Ðon chng trình nhn
và ụiu phi message trong ng dng ục cài ụt nh sau:
MSG
; // bin cha ni dung ục t message nhn ục
while( GetMessage( &msg, NULL, 0, 0 ) != 0 ) {
// Nu message nhn ục khơng phi là WM_QUIT
TranslateMessage(&msg); // Din dch nu là phím
DispatchMessage(&msg); // Ðiu phi cho ca s chính.
}
1.8
:
Khi ng dng ục thc hin, windows to thêm mt tin trình cho th
hin mi ca ng dng, ụng thi xây dng mt message queue dùng
riêng cho th hin này. Tiu trình chính ca tin trình ục to ra có
nhim v thc hin MessageLoop trên message queue dành cho ng
dng, ụng thi khi to các giao din và tiu trình h tr (nu cn).
Q Các cách x lý ca tiu trình chính khi nm quyn ụ
iu khin ng
dng:
̇ Khơng thc hin x lý nào c: ng dng kt thúc.
̇ Thc hin MessageLoop nhng khơng to ca s giao din chính:
ng dng ch nhn message nhng ngi dùng khơng giao tác ục.
̇ Khi to mt ca s vi hàm x lý message WindowProc và chn ca
s này làm ca s giao din chính: Hàm WindowProc ca ca s s
tip nhn và x lý message ục ụiu phi t MessageLoop ca tiu
trình chính. Ngi dùng có th giao tác và kt thúc ng dng ục.
̇ Nh mc th ba, ụng thi to ra các tiu trình phc v: ng dng có
kh nng tip nhn và thc hin ụng thi nhiu u cu x lý.
8 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
1.9
Ði vi mt chng trình trong windows, ngồi phn mã lnh ca các
hàm x lý, resource là mt thành phn khơng kém phn quan trng cha
các ni dung h tr cho vic trang trí hoc phc v cho mt mc ụích ục
bit ca ng dng. Các ni dung ph bin trong resource nh sau:
̇
nh nh ục t v trí làm vic ca thit b liên quan nh
mouse, pen, trackball. Khi ngi dùng tác ụng lên nhng thit b này
thì windows s dng cursor ụ phn ánh hin tng ụó.
̇
: Tp nh ụim (pixels) ca mt nh. Các nh ụim này b trí
theo các dòng và phi hp làm nên hình nh ca ụi tng.
̇
: Thơng tin mơ t khung giao din vi các ụi tng nhp liu
bên trong, là c s ụ to ra các hp hi thoi trong ng dng.
̇
: nh nh ục dùng ụ ục t chc nng ca mt ụi tng,
ng dng hay mt ni dung d liu.
̇
(Hypertext Markup Language): Ngơn ng dùng to ra nhng tài
liu dng vn bn vi nhng ký pháp và k thut ụnh dng mà trình
duyt tng ng có th th hin mt cách xúc tích.
Một số khái niệm lập trình trong môi trường Windows 9
̇ : Mt danh sách các la chn x lý mà ngi dùng có th chn
nhm thc hin mt x lý xác ụnh
̇
: Bng cha các chui ục ụánh du phân bit bi các
s hiu và ục s dng nh các thơng báo trong chng trình. Vic
s dng
String Table
giúp ng dng d dàng thay ụi ngơn ng giao
din ca nó mà khơng cn phi có s chnh sa trên phn mã lnh.
̇
: Tp các nh con xác ụnh các nút ục cài ụt trên
thanh cơng c ca ca s hay hp hi thoi trong ng dng. Mi nút
này là mt mc chn (có th thay th mc chn ca menu) giúp to ra
các message lnh (WM_COMMAND) vi s hiu phân bit ụ có th
n ụnh x lý cn thit.
̇
: Phn khai báo các thơng tin liên quan ụn ng dng, tác gi.
̇
: Cha thơng tin v b font ch ục lu trong tp tin .
̇
: Bao gm các ni dung khơng thuc các loi ni
dung resource chun nói trên. Ngi dùng có th tùy ý cài vào
resource ca ng dng, ụng thi phi t cài ụt x lý thích hp cho
các resource này trong chng trình.
10 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
:
2.1
:
Th vin MFC ca Microsoft bao gm các lp c bn, cài ụt bng
ngơn ng C++, h tr vic lp trình trong mơi trng windows. T các lp
này, MFC xác lp nn tng hình thành ng dng ca windows, bao gm
vic ụnh ngha b khung ng dng, các cơng c chun và ph bin ụ
b sung vào b khung nói trên nhm to ra ng dng hồn chnh. Vi
MFC, cơng vic ca ngi lp trình ch
còn là vic la chn các thành
phn cn thit, ụiu chnh và phi hp chúng hp lý ụ có ục ng
dng kt qu mong mun.
Lp trình windows vi MFC và MicroSoft Visual C++ 6.0 (VC) ụt
ục hiu qu cao bi khơng ch khai thác ục phiên bn mi nht ca
MFC mà còn nhn ục nhiu tin nghi lp trình mà VC cung cp. Ðây là
con ụng ngn và ụn gin, ục bit vi ngi t hc, ụ vit ng dng
windows.
2.2
:
MFC là th vin khng l vi khong 200 lp ụi tng mà vic hiu
rõ và vn dng chúng trong mt khong thi gian ngn là khơng th
ục. Mc tiêu ca chúng ta là hiu và vn dng nhng thành phn ph
bin nht ca th vin ụ xây dng ng dng thơng thng. Khi ụã có
kh nng nht ụnh v s dng MFC thì vi tài liu MSDN, s ch
ng khó
khn gì trong vic m rng khai thác th vin ụ ng dng tr nên mnh
m và tinh t hn.
Trong nhng phn trình bày sau, chúng ta s ln lt tip nhn h
thng ni dung hi nng tính lý thuyt ụ ụm bo cu trúc kin thc, và
phn thc hành phi hp s giúp chúng ta kim nghim và hiu rõ vn
ụ.
2.3 T
:
Theo mơ hình kin trúc ng dng windows mc (1.8), vic gii quyt
vn ụ trên chính là vic thc hin tr li các câu hi sau ụây:
̇ Làm th nào to ụi tng tiu trình chính ca ng dng ?
̇ Làm th nào to ụi tng giao din ca ng dng ?
̇ Qun lý tng tác gia ụi tng ng dng và ụi tng giao din ?
Bng vic xem xét các lp MFC liên quan s giúp ln lt lý gii các
câu hi ục ụt ra. Tip theo, chúng ta tìm hiu xem nhng lp nào
ca MFC giúp khai báo ụi tng tiu trình trong ng dng.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 11
2.4 L
:
CWinThread là mt lp ca MFC, lp ụi tng qun lý tiu trình ục
to ra trong tin trình ca mt ng dng ụang ục thc hin. Tiu trình
ục qun lý có th là là tiu trình giao din hoc tiu trình x lý ni. Các
dch v c bn phc v cho qun lý tiu trình do CWinThread cung cp
thơng qua các thuc tính và hành vi ca nó.
̇ DWORD
: Thuc tính lu s hiu ca tiu trình.
̇ CWnd*
: Lu con tr ụi tng ca s giao din
chính ca tiu trình. Khi ca s giao din chính chm dt hot
ụng, tiu trình liên quan s kt thúc. Nu tiu trình thuc loi tiu
trình x lý ni thì giá tr này k tha t tiu trình giao din cp cao
hn.
̇
( ); Hành vi to lp (constructor) ụi tng tiu trình.
̇ virtual BOOL
( ); Khi to thơng s cho ụi tng ti
u
trình và ụm nhn các x lý b sung khác ca ng dng. Ði vi
tiu trình giao din, hành vi này ục dùng ụ khi to ụi tng
ca s giao din và gán ụa ch ca ụi tng ca s cho
.
̇ virtual int
( ); Hành vi kt thúc ca ụi tng tiu trình.
Thơng qua hành vi này, ụi tng qun lý tiu trình thc hin hồn
tr các tài ngun ca h thng mà nó ụã ụng ký s dng.
̇ virtual int
( ); Hành vi dành riêng cho tiu trình giao din, nó
thc hin vòng lp nhn message, chuyn message cho hành vi
PreTranslateMessage ca lp. Nu hành vi này tr v giá tr 0 thì
message s tip tc ục chuyn ụn các hàm din dch phím
TranslateMessage và hàm ụiu phi message DispatchMessage.
̇ virtual BOOL
(MSG *
pMsg
); Hành vi cho
phép can thip trc trên các message nhn ục t message
queue ca ng dng. Thơng qua ụó, tiu trình giao din có th thc
hin các tin x lý message ục trng nhm ụáp ng u cu ụt
ra cho ng dng.
H
Khi CWinThread ục dùng ụ qun lý ụi tng tiu trình chính thì
hàm WinMain (cài sn bên trong lp bi th vin MFC) t ụng thc
hin các hành vi
InitInstance(), Run() và ExitInstance() theo th t.
12 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
2.5 L :
CWinApp, k tha t CWinThread, là lp ụi tng chun dùng qun
lý tiu trình giao din chính ca ng dng. ng dng windows ch ục
phép s dng mt ụi tng thuc lp này. Ngồi các thuc tính, hành vi
k tha public t CWinThread, CWinApp có các thuc tính và hành vi b
sung sau:
̇ const char*
: Lu chui tên ca ng dng.
̇ LPTSTR
: Lu ni dung chui tham s dòng lnh.
Tham s dòng lnh là tồn b phn ni dung mà ngi dùng gõ
vào ngay sau chui ụng dn và tên chng trình ng dng khi
h thc hin ng dng. Ði vi ng dng có nhiu ch ụ hot
ụng khác nhau thì vic s dng tham s dòng lnh là mt c ch
xác lp các giao c gia ng dng và ngi dùng ụ chn ch
ụ
s dng ng dng thích hp.
̇ int
: Lu giá tr thơng s ụã ục dùng ụ kích hot
ca s giao din chính ca ng dng.
̇
( ); To lp ụi tng tiu trình chính.
̇ HCURSOR
( int
nID
); Np cursor t resource ca ng
dng vào b nh (nu cursor cha ục np).
nID
là s hiu ca
cursor. Hàm tr v giá tr handle qun lý cursor. Giá tr này có kiu
HCURSOR (handle of cursor) mà windows dùng ụ qun lý cursor.
̇ HICON
( int
nID
); Np icon t resource ca ng dng
vào b nh.
nID
là s hiu ca icon. Hàm tr v giá tr handle qun
lý icon. Giá tr này có kiu HICON (handle of icon).
̇ Hành vi hin th hp thơng báo và ch nhn ý kin ngi dùng:
virtual int
(
LPCTSTR
lpszPrompt
, // Ni dung thơng báo
UINT
nType
, // Dng hp thơng báo
UINT
hlpIndex = 0
// S hiu mc giúp ụ (WinHelp)
);
Hành vi này ục kích hot vi tham s tng ng mi khi trong
chng trình s dng hàm AfxMessageBox ụ hin th hp thơng
báo.
int
(
LPCTSTR
lpszPrompt
, UINT
nType
, UINT
hlpIndex = 0
);
nType
: n ụnh dng hp thơng báo. Giá tr này là s kt hp gia
thơng s qui ụnh biu tng hin th và các nút chn b trí trong
hp.
•
:
Giá tr thơng s Nút chn b trí trong hp
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 13
MB_OK OK
MB_OKCANCEL OK - Cancel
MB_YESNO Yes - No
MB_YESNOCANCEL Yes - No - Cancel
MB_ABORTRETRYIGNORE Abort - Retry - Ignore
MB_RETRYCANCEL Retry - Cancel
•
n
:
Giá tr thơng s Biu tng
MB_ICONHAND, MB_ICONSTOP,
MB_ICONERROR
MB_ICONQUESTION
MB_ICONEXCLAMATION, MB_ICONWARNING
MB_ICONASTERISK, MB_ICONINFORMATION
•
S
:
S hiu Nút chn S hiu Nút chn
IDABORT Abort IDOK OK
IDCANCEL Cancel IDRETRY Retry
IDIGNORE Ignore IDYES Yes
IDNO No
• Hành vi DoMessageBox ch ngi s dng tr li bng cách
chn mt nút chn xác ụnh trong hp thơng báo. Hành vi kt
thúc vi giá tr tr v là s hiu ca nút ục chn. K tha hành
vi này ụ chn và thc hin x lý ục trng (s dng dng hp
thơng báo riêng) cho tt c các li gi AfxMessageBox trong
ng dng.
• Hàm AfxMessageBox s dng DoMessageBox ụ hin th hp
thơng báo và ly giá tr ca hành vi này làm kt qu tr v ca
nó.
Ví d
: AfxMessageBox( "Chao Ban" MB_ICONSTOP | MB_OK, 0 );
H Hàm trên thc hin hin th hp thơng báo vi ni dung là
"Chao Ban" , biu tng
ụi kèm, và nút chn OK kt thúc.
14 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
2.6 N:
Trong phn này, chúng ta thc hin ng dng vi ụi tng thuc lp
CWinApp qun lý tiu trình chính. Ðt tên cho d án ca ng dng là
VD0.
Các bc thc hin d án VD0 nh sau:
̇ Khi ụng windows vi h ụiu hành Win95 hoc bn mi hn.
̇ To mi mt th mc ụ cha các d án. Ví d
.
̇ Thc hin ng dng Microsoft Visual C++ 6.0 (VC).
̇ Chn mc
/ t h thng menu ca VC.
̇ Trong hp hi thoi
, chn trang
Projects
:
-
: Loi ng dng thc hin.
-
: Ðng dn th mc ca d án.
-
: Tên d án.
Sau ụó chn
.
̇ Tip theo, trong hp hi thoi
.
-
: To d án rng.
-
: Hồn tt vic khi to d án.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 15
̇ VC hin th hp hi thoi ụ thơng báo
các thơng tin liên quan ụn d án va to. Chn
.
H
Mt d án ụã ục to ra trên ụa. Vi thơng tin nhp nh trên,
d án mi to ra có tên là VD0, tồn b phn chng trình
ngun ca d án ục lu trong th mc VD0 thuc th mc
C:\VC6.
Tip tc thc hin các bc sau ụ hồn tt d án theo u cu.
̇ Ðng ký s dng lp CWinApp ca th vin MFC: Lp CWinApp
ục khai báo trong
ca MFC. B sung tp tin
vào d án và dùng tp tin này ụng ký các th vin cn thit ca
MFC.
Vic b sung tp tin
stdafx.h
vào d án ục tin hành nh sau:
• Chn mc
/ t h thng menu ca VC.
• Trong hp hi thoi
, chn trang :
-
: Loi ni dung tp tin (.h).
-
: B sung tp tin vào d án VD0.
-
: Tên tp tin ( )
Chn , tip tc thc hin các cơng vic sau.
• Son tho tp tin
, nhp các ụnh hng biên dch và
các ch th s dng th vin MFC cn cho d án:
16 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
#if !defined( _DU_AN_0_ )
#define _DU_AN_0_
// _DU_AN_0_ giúp trình dch khơng thc hin lp ch th
#include
#include <afxwin.h> // th vin chun ca MFC
#endif
Sau khi nhp xong ni dung tp tin , chn mc /
(hoc click biu tung
trên thanh cơng c) ụ lu tp tin.
̇ To tp tin
ca d án: Tp tin này cha khai báo
ca các resource ục s dng trong ng dng. Khi biên dch, các
resource này s ục nhúng vào tp tin chng trình (.EXE). Các
bc to tp tin
trong d án nh sau:
• Chn mc
/ . Trong hp hi thoi , chn trang
.
-
: Loi ni dung tp tin (.rc).
-
: B sung tp tin vào d án.
- : Tên tp tin, trùng vi tên ca d án.
Sau ụó chn .
• Ðng ký các h tr ca MFC cho thao tác trên resource: Vic
ụng ký này là c s to quan h gia các ni dung ca
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 17
resource và ụi tng lp trình tng ng ca MFC trong d án.
Thc hin nh sau:
- Right-click trên mc tên resource (
):
- Chn mc
:
Chn các mc nh trên, gõ phím
ụ kt thúc.
• Son tho resource: D án
cha cn s dng resource, tp
tin resource script s tm thi b trng. Chn mc
/ ,
và ụóng màn hình son tho resource ụ kt thúc bc này.
̇ Chn phiên bn biên dch: Có hai phiên bn biên dch chng
trình.
•
: Biên dch chng trình vi thơng tin
debug.
•
: Phiên bn ụem giao, khơng cha thơng
tin debug.
Chn mc
/ :
Chn phiên bn biên dch ( chng hn
). Chn .
18 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ n ụnh biên dch vi th vin MFC: Chn mc /
Trong hp hi thoi
,
-
: : Chn phiên bn n ụnh (ví d: Win32 Debug ),
-
: Các n ụnh chung cho d án.
: Cách liên kt th vin MFC vào
ng dng. Có th tùy chn mt trong hai cách sau:
Ÿ Use MFC in Shared DLL
: Chng trình s dng th vin
MFC theo c ch liên kt ụng. Tp tin chng trình có kích
thc nh nhng khi thc hin cn có các tp tin th vin
(DLL) ca MFC trong th mc h thng ca windows.
Ÿ Use MFC in Static Library
: Th vin MFC ục nhúng vào
chng trình trong lúc biên dch. Tp tin chng trình có kích
thc ln hn nhng ng dng có th hot ụng ục lp.
Sau khi n ụnh xong, chn
.
̇ Khai báo ụi tng thuc lp CWinApp: Dùng bt k tp tin CPP
nào ca d án ụ thc hin cơng vic này. Vì d án VD0 ụang thc
hin ụây cha có tp tin CPP, chúng ta to mi tp tin CPP cho
d án. Gi s tp tin CPP này có tên là MAIN.CPP. Cách thc hin
nh sau:
• Chn mc
/ . Trong hp hi thoi , chn trang
:
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 19
-
: Loi ni dung tp tin (.cpp).
-
: B sung tp tin vào d án.
-
: Tên tp tin (MAIN). Sau ụó chn .
• Trong màn hình son tho ca
, nhp ni dung tp tin:
#include "stdafx.h" // Tp tin cha ụng ký th vin ca MFC
CWinApp ; // Ði tng qun lý tiu trình chính
Sau khi nhp xong, chn mc / ụ lu tp tin.
̇ Biên dch chng trình: Chn mc
/
hoc chn mc trên thanh cơng c.
Ta ụã thc hin xong mt ng dng ụn gin trong mơi trng
windows. Tp tin chng trình ục lu trong th mc DEBUG
(phiên bn biên dch debug) hoc RELEASE (phiên bn biên dch
release).
̇ Chy chng trình: Có th chy chng trình trc tip trong VC
bng cách nhn phím F5 hoc click chn
trên thanh cơng c.
: ng dng VD0 khơng thc hin mt giao tác hay cơng vic
gì c bi nó ch là mt ng dng khung - ục xây dng hồn tồn t
lp CWinApp ca MFC mà khơng có mt x lý b sung nào.
2.7
N
:
20 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
Trong phn này ta thit k mt ng dng mà khi thc hin s hin th
hp thơng báo "
Do You want to Stop
" vi biu tng và các nút chn
YES- NO. ng dng kt thúc khi ngi dùng chn mc YES.
Nhn xét
: ng dng ch hồn thành cơng vic xác ụnh khi ụi tng
qun lý tiu trình chính ca ng dng tin hành x lý thích hp. Ði tng
này thuc lp k tha t lp CWinApp vi x lý b sung nhm thc hin
cơng vic mong mun. Hành vi
ca CWinApp là hành vi
thích hp cho vic k tha và thc hin các b sung này.
Gi s d án ca ng dng có tên là
. Các bc thc hin nh
sau:
̇ To d án VD01 theo các bc nh d án VD0 nhng dng li
bc "
" (khơng thc hin
bc này). Tip tc thc hin các bc sau ụây.
̇ To mi lp
k tha t CWinApp: M màn hình
ca d án (nu cha m) bng cách chn mc menu
/ hoc click chn biu tng trên thanh cơng c.
• Chn trang
:
• Right-click trên mc
, chn .
• Khai báo lp CEmpApp thơng qua hp hi thoi
.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 21
Ÿ
=
Generic Class
: Chn loi lp thơng thng vì
MFC khơng h tr lp CWinApp trong ClassWizard ca nó.
Ÿ
=
CEmpApp
: Tên ca lp mi.
Ÿ
: n ụnh tên tp tin cha khai báo (.h) và cài ụt
(.cpp) ca lp CEmpApp ( nên trùng vi tên ca d án :
):
Sau ụó chn
.
Ÿ
=
CWinApp
: Chn CWinApp làm lp c s.
Ÿ
=
public
: K tha public. Chn ụ kt thúc.
• Lp CEmpApp ụã ục b sung vào d án VD01 cùng vi hai
tp tin là VD01.H và VD01.CPP:
Ÿ
: Cha ni dung khai báo (header) ca lp.
Ÿ
: Cha ni dung cài ụt (implement) ca lp.
Có th m và chnh sa ni dung các tp tin ca lp bng cách
thao tác trc tip trên cu trúc
ca màn hình
.
22 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
• Ðiu chnh lp
ụ nhn ục h tr ca ClassWizard:
Ÿ M tp tin
cha khai báo ca lp, b sung các ni
dung:
class CEmpApp : public CWinApp {
public: ();
virtual ~ ();
//{{AFX_VIRTUAL(CEmpApp)
//}}AFX_VIRTUAL //
H tr k tha hành vi o
//{{AFX_MSG(CEmpApp)
//}}AFX_MSG //
H tr n ụnh x lý
message
DECLARE_MESSAGE_MAP() //
Ðng ký MessageMap
}
Lu ý
: và là ký pháp s dng ca ClassWizard.
Ÿ M tp tin
cha cài ụt ca lp, b sung ni
dung:
#include "stdafx.h"
#include "Emp.h"
BEGIN_MESSAGE_MAP(CEmpApp, CWinApp)
//{{AFX_MSG_MAP(CEmpApp) //
Bng message map,
//}}AFX_MSG_MAP //
s ụ cp ụn các
END_MESSAGE_MAP() //
phn sau
Phn b sung
B sung
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 23
̇ Khi to thơng tin : Thao tác này là c s ụ khai thác
tin ích ca ClassWizard trong vic ụnh ngha lp, khai báo thơng
tin k tha, n ụnh x lý message, ụnh ngha bin,.
• Chn menu
/ :
• Chn
:
Chn
, sau ụó chn .
• Trong hp hi thoi
, Chn ụ kt thúc.
Thơng tin
ục lu trong tp tin có cùng tên vi tên
ca d án và phn m rng là .
.
̇ K tha hành vi
ca lp CWinApp cho lp .
Dùng hành vi này cài ụt x lý b sung nh u cu ca ng dng:
24 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
• Trong màn hình ca d án, chn , right-
click trên tiêu ụ ca lp
:
• Chn mc
• Chn hành vi
, sau ụó chn mc .
• Trong phn son tho ni dung ca hành vi
thuc
lp
, ta cài ụt ụon chng trình x lý sau:
BOOL CEmpApp::
()
{
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 25
UINT stop; //
Bin kim tra ụng ý dng?
do {
stop = AfxMessageBox( "Do You want to stop",
MB_YESNO | MB_ICONQUESTION, 0 );
} while (stop == IDNO ); //
Tip tc lp nu chn NO
return TRUE; // X
lý tin hành bình thng
}
̇ Dùng lp CEmpApp khai báo ụi tng qun lý tiu trình chính ca
ng dng: M tp tin ca lp CEmpApp, b sung ni
dung:
#include "stdafx.h"
#include "Emp.h"
CEmpApp ; // Ði tng kiu CEmpApp, dùng qun lý
// tiu trình chính ca ng dng.
// Khơng chnh sa các ni dung khác!
̇ Biên dch và chy chng trình.
2.8 T
:
Ði vi ng dng trong windows, icon khơng ch là hình nh trang trí
ụn thun mà còn là yu t gi nh v ng dng tt nht. Windows s
dng icon ca ng dng ụ ụi din cho ng dng tt c nhng ni nào
mà ngi dùng có th nhìn thy và khai thác ng dng.
̇ M d án trong VC.
̇ M màn hình Workspace ca d án, chn trang ResourceView.
right-click trên tiêu ụ resource ca d án.
26 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ Chn mc ...
̇ Chn mc
, sau ụó chn :
Ta nhn ục màn hình thit k icon. V icon có ni dung tùy ý.
̇ n ụnh các thơng s
thuc tính ca icon (s
hiu icon, tên th mc
và tên tp tin cha
icon) trong d án: Chn
trong
ca d án,
rigth-click trên icon mi
thêm.
Chn mc
.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 27
̇ Thc hin n ụnh thơng s ca icon thơng qua hp hi thoi sau:
-
ID
: S hiu icon. là s hiu qui c
dùng cho icon chính ca ng dng.
- : Tên tp tin cha icon. là th mc con s ục
to trong th mc d án ụ cha các tp tin
resource.
Sau khi n ụnh xong, gõ phím
ụ kt thúc.
̇ Ðóng màn hình thit k icon resource.
̇ Biên dch d án. Dùng
xem tp tin VD01.exe
trong th mc debug ca d án. Lúc này, ng dng VD01 ụã có
icon riêng.
2.9 L
N:
Sau khi hồn tt d án, mt vic rt thng xun là lu gi li
chng trình ngun ca d án. Cơng vic này ụòi hi phi loi b khi
th mc d án các tp tin khơng cn thit. Ðó là các tp tin sau:
̇ Th mc d án : Các tp tin .NCB, .PLG, .OPT, .APS.
̇ Th mc Debug : Tt c các tp tin, tr tp tin .exe cn gia li.
̇ Th mc Release : Tt c
các tp tin, tr tp tin .exe cn gia
li.
2.10 L
:
CString là lp ụi tng ca MFC cho phép qun lý mt ni dung
chui trong b nh vi nhng ục tính u vit sau:
- Ni dung chui lu tr có ụ dài ln vi c ch s dng b nh ti
u.
- Xây dng da trên kiu TCHAR nên thích nghi vi b mã
UNICODE.
- Các hành vi x lý sn sàng cho các tác v chui thơng thng.
Mt s hành vi ục s
dng ph bin ca CString nh sau:
̇
( ); Hành vi to lp ụi tng chui.
̇ int ( ) const; Tr v s ụo chiu dài chui.
28 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ void ( ); Xóa rng ni dung ụi tng chui.
̇ BOOL
( ) const; Tr v TRUE nu ni dung chui là rng.
̇ TCHAR operator
( int
nIndex
) const; Tr v ký t v trí
nIndex
.
̇ void
( int
nIndex
, TCHAR
ch
); Ðt ký t
ch
vào v trí
nIndex
.
̇ operator
( ) const; Chuyn v kiu chui ca C.
̇ CString::operator =
; Phép tốn gán chui cho ụi tng.
̇ CString::operator +
; Phép tốn cng chui.
̇ CString::operator
; Phép tốn ni chui mi vào ụi tng.
̇ CString Comparison
; Trong ụó là phép tốn
quan h thơng thng nh: == , < , <= , > , >= , !=.
̇ CString
( int
nFirst
[, int
nCount
] ) const; Trích chui con gia.
̇ CString
( int
nCount
) const; Trích chui con bên trái.
̇ CString
( int
nCount
) const; Trích chui con bên phi.
H
nCount
là chiu dài (s ký t) ca chui con ục trích ra.
̇ void
( ) / void ( ); Vit hoa / thng ni
dung.
̇ void
( LPCTSTR
lpszFormat
, ... ); To ni dung cho chui.
̇ void
( ) / void ( ); Hy khong trng trái / phi.
̇ BOOL
( UINT
nID
); Gán ni dung cho chui bi mt
hng chui trong string table resource.
nID
là s hiu ca hng
chui.
:
1
. Vit ng dng cho phép hin th ụng dn ụn tp tin chng trình và
chui tham s dòng lnh thc thi nó.
2. Vit ng dng có cài ụt DoMessageBox sao cho hàm
AfxMessageBox s dng trong ng dng hin th hp thơng báo vi icon
riêng ca ng dng.
HD
: S dng hàm: int ( LPMSGBOXPARAMS
pMsg
);
typedef struct {
UINT cbSize; // Kích thc, = sizeof( MSGBOXPARAMS )
HWND hwndOwner; // Handle ca ca s cha, có th = NULL
HINSTANCE hInstance; // Handle ng dng =
AfxGetInstanceHandle()
LPCTSTR lpszText; // Ni dung chui thơng báo
LPCTSTR lpszCaption; // Ni dung chui tiêu ụ
DWORD dwStyle; // Dng hp, cha thơng s MB_USERICON
LPCTSTR lpszIcon; // Chui tên icon ục hin tr trong hp
DWORD_PTR dwContextHelpId; // S hiu giúp ụ
MSGBOXCALLBACK lpfnMsgBoxCallback; // Hàm x lý
DWORD dwLanguageId; // S hiu ngơn ng s dng
} , * ;
Các lớp giao diện đồ họa của MFC 29
:
3.1
A:
Ð h tr ng dng trong vic trang trí giao din ụ ha (Graphic
Device Interface - GDI) nh màn hình, máy in., windows cung cp mt
h thng các cơng c ụ ha c bn nh sau:
̇
Pen
: Cơng c v ụim hoc ụng thng.
̇
Brush
: Cơng c tơ màu.
̇
Font
: Cơng c qui ụnh kiu ký t cho ni dung vn bn.
̇
Bitmap
: Cơng c qun lý vùng nh ụim.
̇
Palette
: Cơng c qun lý b màu hin th.
̇
Region
: Cơng c qun lý vùng hin th có dng bt k.
Thơng qua các cơng c nói trên, ng dng trong windows có th thc
hin các tác v ụ ha c bn mt cách d dàng mà khơng phi bn tâm
ụn cu trúc vt lý ca thit b hin th. Các cơng c này gi là cơng c
GDI.
3.2
:
Vic khai thác kh nng ca các cơng c GDI ục thc hin thơng
qua mt cu trúc cha thơng tin qun lý thit b hin th: Device Context
(DC). Ti mi thi ụim, mi DC ục phép gn vi mt thit b hin th
ụ ha và s dng mt b các cơng c GDI duy nht. Mun s dng mt
cơng c GDI mi thì DC phi chm dt s d
ng cơng c tng ng mà
nó ụang dùng.
Mi khi mt DC ục to mi, h thng t ụng chun b mt b cơng
c GDI (tr bitmap) mc nhiên cho nó. ng dng có th tùy nghi thay ụi
các cơng c này cho phù hp vi nhu cu ca ng dng.
3.3. T
A:
Vic ụnh v trên giao din ụ ha ục thc hin da trên h trc ta
ụ có gc (0,0) là góc trái-trên (top-left corner) ca giao din ụ ha,
chiu dng ca trc hồnh (trc x) hng t trái sang phi, chiu dng
ca trc tung (trc y) hng t trên xung di. Trên mt phng giao
din ụ ha ụó:
̇ Ðim: Biu din bng cp ta ụ (x,y).
̇ Hình ch nht: Biu din bng cp ụnh góc trái trên và góc phi
di.
Thơng tin v ụim, vùng hình ch nht và kích thc ca các ụi
tng trong mt phng giao din ụ ha ục ục t thơng qua các cu
trúc sau:
30 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ Cu trúc qun lý 1 ụim:
typedef struct _POINT {
int
x
,
y
// Ta ụ ( hồnh ụ, tung ụ ) ca ụim
}
;
̇ Cu trúc qun lý 1 vùng hình ch nht
:
typedef struct _RECT {
int
top
,
left
; // Ta ụ góc trái trên hình ch nht.
int
right
,
bottom
; // Ta ụ góc phi di hình ch nht.
}
;
̇ Cu trúc qun lý chiu rng và chiu cao vùng hình ch nht
:
typedef struct _SIZE {
int
cx
,
cy
; // Chiu rng, chiu cao vùng hình ch
nht.
}
;
3.4
:
MCF cung cp mt h thng phong phú các lp vi ụy ụ chc nng
nhm h tr ngi dùng ti ụa trong lp trình GDI. Vi vic vn dng k
thut OOP trên các lp GDI ca MFC, ngi dùng d dàng to ra ng
dng mong mun mà khơng phi vit q nhiu mã lnh trong chng
trình.
3.4.1
ụi t:
̇
: Lp ụi tng ụim, tng ng vi cu trúc POINT.
̇
: Lp ụi tng vùng hình ch nht trên giao din ụ ha,
tng ng vi cu trúc RECT. CRect có các hành vi ục trng sau:
•
( ); To lp ụi tng vùng hình ch nht rng.
•
(int
left
, int
top
, int
right
, int
bottom
); To lp ụi tng
vùng hình ch nht có thơng s xác ụnh.
• int
( ) const; Tr v ụ rng vùng hình ch nht.
• int
( ) const; Tr v ụ cao vùng hình ch nht.
• void
( ); Hp lý hóa các thành phn ta ụ ca
rect mà khơng làm thay ụi v trí và kích thc ca nó.
VD
: Gi s khi to mt rect khơng hp l nh sau:
CRect rect( 100
, 0, 0, 50 ); // rect.left = 100 > rect.right = 0
rect. NormalizeRect();
rect tr nên hp l vi: rect ( 0
, 0, 100, 50 );
̇
: Lp ụi tng kích thc, tng ng vi cu trúc SIZE.
3.4.2 L
:
CPen là lp ụi tng qun lý
pen
, mt cơng c GDI quan trng ca
DC. Thơng qua ụi tng này, DC có th thay ụi màu sc, nét v ca
Các lớp giao diện đồ họa của MFC 31
ụim hay ụng thng mà DC s trc hin. CPen có các hành vi ục
trng sau:
̇
( ); To lp ụi tng pen rng. Chúng ta phi khi to tham
s cho ụi tng này trc khi s dng.
̇
( // To lp ụi tng pen vi tham s
int
nPenStyle
, // Kiu nét v
int
nWidth
, // Ð rng nét v (=1: mc nhiên)
COLORREF
crColor
// Màu sc ca nét v
);
nPenStyle
có th nhn mt trong các giá tr sau:
PS_SOLID : PS_DASH :
PS_DOT : PS_DASHDOT :
crColor c
ó th nhn giá tr t macro phi màu RGB( ) nh sau:
RGB (int
màu_ụ
, int
màu_xanh_lá_cây
, int
màu_xanh_dng
)
Mi màu ục ục trng bng mt giá tr trong ụon 0255 phn
ánh ụ sáng ca nó. B phi màu theo qui tc phi màu t
nhiên.
̇ BOOL
( int
nPenStyle
, int
nWidth
, COLORREF
crColor
); Khi to thơng s cho ụi tng pen. Ý ngha tham s nh trên.
̇ operator HPEN() const; Tốn t chuyn kiu, tr v handle ca
pen (HPEN) qun lý bi ụi tng.
3.4.3 L
:
CBrush là lp ụi tng qun lý brush, cơng c GDI ca DC. Thơng
qua ụi tng này, DC có th thay ụi màu sc, dng ca nét tơ trong
mt vùng hình ch nht mà DC s trc hin. CBrush có các hành vi ục
trng sau:
̇
( ); To lp ụi tng brush rng.
̇
( COLORREF
crColor
); To lp ụi tng brush có màu tơ
tng ng vi màu qui ụnh bi tham s
crColor
.
̇
( int
nIndex
, COLORREF
crColor
); To lp ụi tng brush
có màu tơ
crColor
, và nét tơ
nIndex
.
Giá tr nét tơ có th là: HS_VERTICAL (ụng k sc ụng),
HS_HORIZAONTAL (ụng k sc ngang).
̇ BOOL
( COLORREF
crColor
); To ục tính tơ
ục vi màu
crColor
cho ụi tng brush cha có thơng s.
̇ operator HBRUSH() const; Tốn t chuyn kiu, tr v handle ca
brush (HBRUSH) qun lý bi ụi tng.
3.4.4 L
p :
CFont là lp ụi tng qun lý font, cơng c GDI ca DC. Thơng qua
ụi tng này, DC thc hin n ụnh font, kiu dáng, kích thc ca b ký
32 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
t ục s dng cho vic hin th các ni dung vn bn. Các hành vi ục
trng:
̇
( ); To lp ụi tng font rng.
̇
(const LOGFONT*
lpLogFont
); To lp ụi tng font vi
thơng s ụy ụ. Giá tr thơng s ục n ụnh bi tham s kiu
cu trúc LOGFONT cha thơng tin. LOGFONT ục khai báo nh
sau:
typedef struct tagLOGFONT {
LONG
lfHeight
; // chiu cao ca ký t
LONG
lfWidth
; // chiu rng trung bình các ký t
LONG
lfEscapement
; // góc (1/10) gia hng in và trc X
LONG
lfOrientation
; // góc (1/10) gia ký t và trc X (No 9x)
LONG
lfWeight
; // mc ụ ụm ca font ch (0 - 1000)
BYTE
lfItalic
; // = TRUE : Ch nghiêng
BYTE
lfUnderline
; // = TRUE : Ch gch di
BYTE
lfStrikeOut
; // = TRUE : Ch gch 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]; // Chui tên ca font
} ;
H Win9x ch dùng
lfEscapement
.
̇ int
( LOGFONT *
pLogFont
); Ly thơng tin ca font
qun lý bi ụi tng font ch. Kt qu ục ụin vào bin kiu
LOGFONT ch bi tham s kiu con tr LOGFONT* :
pLogFont
.
̇ operator HFONT( ); Tốn t chuyn kiu, tr v handle ca font
ục qun lý bi ụi tng.
̇ BOOL
( LOGFONT *
lpLogFont
); Khi to thơng
s cho ụi tng font t thơng tin lu trong cu trúc ch bi
lpLogFont
.
3.4.5 L
p :
CBitmap là lp ụi tng qun lý bitmap, mt cơng c GDI quan trng
giúp qun lý vùng nh ụim (pixels) ca DC. Thơng qua ụi tng này,
DC có th d dàng to ni dung trang trí trên giao din ụ ha t ni
dung nh có sn ục lu trong tp tin, ụng thi thc hin các tác v x
lý nh c bn trên ni dung ụó. CBitmap cung cp các hành vi ục trng
sau:
̇
( ); To lp ụi tng bitmap rng.
Các lớp giao diện đồ họa của MFC 33
̇ BOOL ( UINT
nIDResource
); To ni dung cho ụi
tng bitmap vi thơng tin ục ly t mt nh trong resource.
nIDResource
: s hiu ca nh bitmap trong resource ca chng
trình.
̇ BOOL
(
CDC*
pDC
, // Con tr ụi tng DC tng ng
int
nWidth
, // Chiu rng,
int
nHeight
// chiu cao tính bng pixel ca bitmap ục to.
); To ni dung cho ụi tng bitmap vi thơng tin v màu sc, ụ
phân gii tng ng vi DC ch bi con tr tham s
pDC
.
̇ int
( BITMAP*
pBitMap
); Ly thơng tin v bitmap ục
qun lý bi ụi tng. Kt qu nhn ục s ục ụin vào bin có
kiu BITMAP ch bi tham s kiu con tr BITMAP* :
pBitmap
.
Cu trúc
bao gm các trng có ý ngha nh sau:
typedef struct tagBITMAP { /* bm */
int
bmType
; // Kiu bitmap,
int
bmWidth
; // Chiu rng bitmap tính bng pixel
int
bmHeight
; // Chiu cao bitmap tính bng pixel
int
bmWidthBytes
; // Kích thc 1 dòng pixel trong bitmap
BYTE
bmPlanes
; // S màu.
BYTE
bmBitsPixel
; // S bit màu ca 1 pixel
LPVOID
bmBits
; // Ða ch vùng nh cha pixel ca
bitmap
} ;
̇ operator () const; Tốn t chuyn kiu, tr v handle ca
bitmap ục qun lý bi ụi tng.
3.4.6 L
p :
CPalette là lp ụi tng qun lý palette, mt cơng c GDI ca DC.
Thơng qua ụi tng này, DC có th to ra các hiu ng màu trên giao
din ụ ha bng cách thay ụi các b màu mt cách phù hp.
̇ ( ); To lp ụi tng palette rng.
̇
( LPLOGPALETTE
lpLogPalette
); Khi to thơng s
cho ụi tng palette rng. Con tr tham s
lpLogPalette
ch ụn
bin kiu cu trúc LOGPALETTE cha thơng tin b màu dùng khi
to.
typedef struct tag
{
WORD
palVersion
; // S hiu palette h thng
WORD
palNumEntries
; // S màu s dng
PALETTEENTRY
palPalEntry
[1]; // Cha các giá tr màu,
// có s phn t mng bng palNumEntries
} LOGPALETTE ;
34 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
H Mi phn t ca palPalEntry có kiu PALETTEENTRY phn ánh
giá tr màu dùng hin th màu ch mc (color index) tng ng vi v
trí th t ca nó. Cu trúc PALETTEENTRY có ni dung nh sau:
typedef struct tagPALETTEENTRY {
BYTE peRed ; // Giá tr thành phn màu ụ
BYTE peGreen ; // Giá tr thành phn màu xanh lá cây
BYTE peBlue ; // Giá tr thành phn màu xanh dng
BYTE peFlags ; // Vai trò màu trong h thng.
} ;
̇ operator
( ) const; Tốn t chuyn kiu, tr v handle
ca palette qun lý bi ụi tng.
3.4.7 L
:
CRgn là lp ụi tng qun lý region, mt cơng c GDI quan trng
giúp DC n ụnh vùng nh x lý có hình dng tùy ý trên giao din ụ ha
ca nó.
̇
( ); To lp ụi tng vùng nh rng.
̇ BOOL
( int
x1
, int
y1
, int
x2
, int
y2
); Khi to thơng
s cho ụi tng vùng nh bng 1 hình ch nht vi ta ụ góc trái
trên và góc phi di ln lt là (x1, y1) và (x2, y2).
̇ BOOL
( int
x1
, int
y1
, int
x2
, int
y2
); Khi to
thơng s cho ụi tng vùng nh bi hình ellipse ni tip hình ch
nht có góc trái trên (x1, y1) và góc phi di (x2, y2).
̇ BOOL
(
LPPOINT
lpPoints
, // Mng cha ta ụ các ụim ziczac
int
nCount
, // S phn t POINT trong mng trên
int
nMode
// = WINDING
);
Khi to thơng s cho ụi tng vùng nh bi mt ụng ziczac
khép kín qua các ụim có ta ụ xác ụnh và ục lu trong mt
mng.
int
(
CRgn*
pRgn1
, // Con tr ụi tng qun lý vùng nh th nht
CRgn*
pRgn2
, // Con tr ụi tng qun lý vùng nh th hai
int
nCombineMode
// Cách kt hp hai vùng nh
); To thơng s cho ụi tng vùng nh trên c s kt hp hai vùng
nh ụã có. Tham s
nCombineMode
có th là:
RGN_AND : Vùng nh kt qu là vùng giao nhau gia hai vùng
nh.
RGN_OR : Vùng nh kt qu là vùng hp gia hai vùng nh.
RGN_DIFF : Vùng nh kt qu là vùng bù gia hai vùng nh.
Các lớp giao diện đồ họa của MFC 35
̇ operator HRGN() const; Tốn t chuyn kiu, tr v handle ca
vùng nh qun lý bi ụi tng.
:
CDC là lp ụi tng qun lý DC. Thơng qua ụi tng DC, kh nng
ca các cơng c ụ ha ục khai thác cho vic trang trí giao din ụ
ha qun lý bi DC. CDC có các hành vi ục trng nh sau:
̇
( ); To lp ụi tng DC rng.
̇ virtual BOOL
( CDC*
pDC
); Khi to thơng
s cho ụi tng DC mt cách tng thích vi mt DC có sn ục
ch bi con tr tham s
pDC
.
̇ virtual BOOL
( ); Hy b ụi tng DC.
̇ CPen*
( CPen*
pPen
); Chn cơng c v mi cho DC.
pPen
: con tr ụn ụi tng pen s ục dùng cho DC.
Hàm tr v con tr ch ụn ụi tng pen mà DC ụang s dng.
H Có th s dng hành vi này cho các cơng c trang trí khác ca
DC. Kt qu tr v là con tr ụn ụi tng ụang dùng tng ng.
̇ CPent* ( ); Tr v giá tr con tr ca ụi tng pen
ụang ục s dng bi DC.
H M
t cách tng t cho các cơng c trang trí khác.
̇ virtual COLORREF
( COLORREF
crColor
); Ðt màu
nn cho DC.
crColor
là giá tr màu ụt.
̇ COLORREF
( ); Tr v giá tr màu nn ca DC.
̇ virtual COLORREF
( COLORREF
crColor
); n ụnh
màu ục s dng ụ hin th các ni dung vn bn trên DC.
̇ COLORREF ( ); Tr v giá tr màu hin dùng ụ hin
th các ni dung vn bn trên DC.
̇ int
( int
nBkMode
); n ụnh ch ụ hin th nn ký t
biu din ni dung vn bn.
nbkMode
cha thơng s n ụnh:
TRANSPARENT : Nn ch hin th trong sut.
OPAQUE : Ch hin th có màu nn.
̇ int Get
BkMode( ); Ly ch ụ hin th ch ca DC.
̇ virtual BOOL
(
int
x
,
y
, // Ta ụ bt ụu hin th
LPCTSTR
lpszString
, // Ni dung chui hin th.
int
nCount
// Chiu dài chui.
); Hin th ni dung chui vn bn lên giao din ụ ha ca DC.
̇ virtual int
(
LPCTSTR
lpszString
, // Ni dung chui hin th
int
nCount
, // Chiu dài chui
LPRECT
lpRect
, // Con tr ụn bin kiu RECT
36 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
UINT
nFormat
// Cha thơng tin canh chnh chui hin
th.
); In ni dung chui lên giao din ụ ha ca DC vi các canh
chnh.
lpRect
: Ch ụn bin kiu RECT cha thơng tin gii hn vùng hin
th.
nFormat
: Cho phép kt hp mt cách hp lý các canh chnh trong
vùng hình ch nht gii hn. Các thơng s canh chnh có th là:
DT_CENTER : Chnh gia theo chiu ngang
DT_VCENTER : Chnh gia theo chiu dc
DT_RIGHT : Chnh phi.
̇ CPoint
( int
x
, int
y
); n ụnh ụim v hin hành.
̇ BOOL
( int
x
, int
y
); V ụng thng t ụim v hin hành
ụn ụim có ta ụ (x, y).
̇ void
(
LPCRECT
lpRect
, // Con tr ch ụn bin kiu RECT.
CBrush*
pBrush
// Con tr ụn ụi tng brush dùng tơ màu.
); Tơ màu vùng hình ch nht ục xác ụnh bi các giá tr cha
trong bin kiu RECT do tham s
lpRect
ch ụn.
̇ void
// V hình ch nht 3 chiu
LPCRECT
lpRect
, // Con tr ụn bin RECT
COLORREF
clrTopLeft
, // Màu v cnh trái và cnh trên.
COLORREF
clrBottomRight
// Màu v cnh phi và cnh di
)
;
̇ BOOL
(
LPRECT
lpRect
, // Con tr ụn bin kiu RECT.
UINT
nEdge
, // Cách v trên các g (trong, ngồi) cnh.
UINT
nFlags
// Các cnh ục v.
); V khung ch nht vi hiu ng 3 chiu.
nEdge
có th kt hp các giá tr sau:
BDR_RAISEDINNER : V ni g trong
BDR_SUNKENINNER : V chìm g trong
BDR_RAISEDOUTER : V ni g ngồi
BDR_SUNKENOUTER : V chìm g ngồi
nFlags
có th kt hp các giá tr sau:
BF_RECT : V tt c các cnh
BF_TOPLEFT : V cnh trái và cnh trên
BF_BOTTOMRIGHT : V cnh phi và cnh di
̇ BOOL
(
CPoint
pt
, // Ðim ụt góc trái trên ca nh trên DC
CSize
size
, // Kích thc vùng hin th nh
CBitmap*
pBitmap
, // Con tr ụi tng bitmap ục v
Các lớp giao diện đồ họa của MFC 37
UINT
nFlags
, // = DST_BITMAP (v bitmap)
CBrush*
pBrush
// Con tr ụi tng Brush, s dng khi v
// Bitmap n: nFlags |= DSS_DISABLED
); V bitmap hoc icon lên DC.
̇ BOOL
(
int
x
, int
y
, // Ta ụ góc trái trên và
int
nWidth
, int
nHeight
, // kích thc vùng nhn nh.
CDC*
pSrcDC
, // Con tr ụi tng qun lý DC ngun.
int
xSrc
, int
ySrc
, // Góc trái trên phn nh ngun ục
chép.
DWORD
dwRop
// Cách chp pixel t nh ngun.
); Chp ni dung phn nh bt ụu t v trí (
xSrc
,
ySrc
) trong DC
ngun sang vùng nhn nh bt ụu t v trí (
x
,
y
), vi kích thc
(nWidth, nHeight)
trong DC qun lý bi ụi tng.
Giá tr pixel ục chuyn vào vùng nhn nh tùy thuc vào giá tr
tham s
dwRop
. Mt s giá tr dùng cho tham s này có th nh
sau:
• SRCCOPY : Giá tr pixel ly trc tip t pixel ca nh ngun.
• SRCPAINT : Là kt qu OR ca pixel nh ngun và nh nhn.
• SRCAND : Là kt qu AND ca pixel nh ngun và nh
nhn.
̇ BOOL
(
int
x
, int
y
, // Ta ụ góc trái trên và
int
nWidth
, int
nHeight
, // Kích thc vùng nhn nh
CDC*
pSrcDC
, // Con tr ụi tng qun lý DC ngun
int
xSrc
, int
ySrc
, // Góc trái trên phn nh ục chép
CBitmap&
maskBitmap
, // Con tr ụi tng bitmap mt n
int
xMask
, int
yMask
, // Góc trái trên vùng nh làm mt n
DWORD
dwRop
// Cách chp pixel t nh ngun.
); Tng t BitBlt nhng s dng mt n lc pixel. Ði tng
maskBitmap
s dng nh trng ụen (monochrome bmp) mà mi
pixel "ụen" s ngn vic chuyn pixel v trí tng ng t DC
ngun sang DC qun lý bi ụi tng, các v trí khác ục chuyn
bình thng.
̇ BOOL
(
int
x,
int
y,
// Ta ụ góc trái trên và
int
nWidth,
int
nHeight,
// Kích thc vùng nhn nh.
CDC*
pSrcDC,
// Con tr ụi tng DC ngun.
int
xSrc,
int
ySrc,
// Ta ụ góc trái trên và
int
nSrcWidth,
int
nSrcHeight,
// Kích thc phn nh ục
chép.
38 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
DWORD
dwRop
// Cách chp pixel t nh ngun.
); Tng t BitBlt nhng nh ụích và nh ngun có th có kích
thc khác nhau nên to hiu ng co dãn nh chép ục so vi
nh ngun.
̇ BOOL
(
int
x
, int
y
, // Ta ụ góc trái trên ni ụt icon trên DC
HICON
hIcon
// Handle ca icon
); V icon
hIcon
lên v trí (
x, y
) ca DC qun lý bi ụi tng.
3.6 L
:
CImageList là lp ụi tng
imagelist
. Mi
imagelist
cho phép qun lý
danh sách nh có cùng kích thc và h tr nhiu tin ích trên chúng.
̇
( ); To lp ụi tng
imagelist
rng.
̇ BOOL
(
UINT
nBitmapID
, // S hiu ca resource bitmap cha các
nh
int
cx
, // Ð rng mi nh trong bitmap nói trên
int
nGrow
, // S nh trong bitmap
COLORREF
crMask
// Màu mt n (khơng hin th)
); Khi to ni dung cho ụi tng t mt bitmap trong resource.
̇ int GetImageCount( ); S nh ca imagelist qun lý bi ụi tng.
̇ int
(
CBitmap*
pbmImage
, // Con tr ụi tng bitmap ca nh
mi.
CBitmap*
pbmMask
| // Ði tng bitmap mt n hoc
[ COLORREF
crMask
] // màu mt n ca nh mi.
); Thêm mt nh (bitmap) vào imagelist.
̇ BOOL
( int
nImage
, CPoint
ptHotSpot
); Chun b
chuyn nh th
nImage
trong imagelist vi v trí bt ụu
ptHotSpot
.
̇ static BOOL
( CWnd*
pWndLock
, CPoint
point
); Cm
ca s
pWndLock
, ni mà imagelist ụang thc hin chuyn nh.
̇ static BOOL
(CPoint
pt
); Chuyn nh
nImag
ụn v trí
pt
.
̇ static BOOL
( CWnd*
pWndLock
); Chm dt tình trng
b cm ca ca s
pWndLock
.
̇ static void
( ); Chm dt tác v chuyn nh.
̇ static BOOL
( BOOL
bShow
); Hin th hoc che
nh trong q trình chuyn hình.
̇ BOOL
(
CDC*
pdc
, // Ði tng DC dùng v hình
int
nImage
, // S th t hình ục v trong imagelist
POINT
pt
, // Ta ụ góc trái trên ni v hình