Thứ Hai, 17 tháng 2, 2014
Tài liệu Lập trình Windows với MFC Visual C++ 6.0 pdf
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ỉ:
http://thanh.andisw.com/?id=16&id2=85
:
Source Code đặc sắc của nhiều tác giả trên thế giới có thể download:
- http://msdn.microsoft.com
- http://www.codeguru.com
- http://www.codeproject.com
- http://www.softechsoftware.it
- http://www.flipcode.com
- http://nps.vnet.ee
:
- 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: lntmail@yahoo.com
emp@ueh.edu.vn
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 - lntmail@yahoo.com
̇ 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 - lntmail@yahoo.com
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 - lntmail@yahoo.com
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 - lntmail@yahoo.com
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 - lntmail@yahoo.com
:
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 - lntmail@yahoo.com
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 - lntmail@yahoo.com
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 - lntmail@yahoo.com
#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 .
Đăng ký:
Đăng Nhận xét (Atom)
Không có nhận xét nào:
Đăng nhận xét