Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Visual C++ lý thuyết và ứng dụng
PREMIUM
Số trang
133
Kích thước
2.2 MB
Định dạng
PDF
Lượt xem
899

Visual C++ lý thuyết và ứng dụng

Nội dung xem thử

Mô tả chi tiết

LEÂ NGOÏC THAÏNH

[email protected]

LAÄP TRÌNH WINDOWS VÔÙI MFC

Microsoft Visual C++ 6.0

NHAØ XUAÁT BAÛN THOÁNG KEÂ

MUÏC LUÏC

CHÖÔNG 1 : MOÄT SOÁ KHAÙI NIEÄM LAÄP TRÌNH

TRONG MOÂI TRÖÔØNG WINDOWS

1.1 Chöông trình ( Program )

1.2 ÖÙng duïng ( Application )

1.3 Tieán trình ( Process )

1.4 Tieåu trình (Thread )

1.5 Thoâng ñieäp ( Message )

1.5.1 Nguoàn goác cuûa message

1.5.2 Caùc loaïi message

1.5.3 Soá hieäu message (Message Indentifier – MessageID)

1.5.4 Ñaëc taû message

1.6 Cöûa soå giao dieän (window) cuûa öùng duïng

1.7 Message queue

1.8 Kieán truùc xöû lyù cuûa öùng duïng trong Windows

1.9 Resource cuûa öùng duïng

CHÖÔNG 2 : THÖ VIEÄN MFC CUÛA MICROSOFT

& ÖÙNG DUÏNG CÔ BAÛN TRONG WINDOWS

2.1 Thö vieän MFC (Microsoft Foundation Class)

2.2 Tieáp an MFC

2.3 Taïo öùng duïng windows vôùi MFC nhö theá naøo ?

2.4 Lôùp quaûn lyù tieåu trình CwinThread

2.5 Lôùp quaûn lyù tieåu trình giao dieän chính CwinApp

2.6 Thöïc hieän öùng duïng ñôn giaûn

2.7 Thöïc hieän öùng duïng giao taùc ñôn giaûn

2.8 Taïo môùi Icon Resource cho öùng duïng

2.9 Löu tröõ chöông trình nguoàn

2.10 Lôùp Cstring cuûa MFC

CHÖÔNG 3 : CAÙC LÔÙP GIAO DIEÄN ÑOÀ HOÏA CUÛA MFC

3.1 Caùc coâng cuï giao dieän ñoà hoïa

3.2 Device Context

3.3 Toïa ñoä treân giao dieän ñoà hoïa

3.4 Caùc lôùp MFC hoã trôï GDI

3.4.1 Caùc lôùp ñoái töôïng ñieåm, hình chöõ nhaä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

CHÖÔNG 4 : CÖÛA SOÅ GIAO DIEÄN LÔÙP VAØ LÔÙP CWnd

4.1 Cöûa soå giao dieän

4.2 Lôùp CWnd

4.3 Söû duïng ñoái töôïng CWnd

4.3.1 Söû duïng CWnd laøm giao dieän chính cuûa öùng duïng

4.3.2 ÖÙng duïng chæ chaïy moät baûn (instance) taïi moãi thôøi ñieåm

CHÖÔNG 5 : XÖÛ LYÙ MESSAGES

5.1 Lôùp xöû lyù message CCmdTarget:

5.2 Khai baùo muïc xöû lyù message trong MessageMap

5.3 Caùc lôùp keá thöøa CCmdTarget

5.4 MessageMap cuûa lôùp keá thöøa CWnd trong öùng duïng

5.4.1 Cöûa soå cuûa öùng duïng coù chöùc naêng hoaït ñoäng

5.4.2 WM_PAINT vaø haønh vi OnPaint cuûa CWnd

CHÖÔNG 6 : ÖÙNG DUÏNG COÂNG CUÏ GDI

6.1 DC vaø BITMAP

6.2 ÖÙng duïng vôùi cöûa soå chính hieån thò aûnh

6.3 Sao cheùp aûnh töø DC ñeán DC, phoùng to & thu nhoû aûnh

6.4 DC trong boä nhôù ( DC aûo) – vuøng veõ ñeäm lyù töôûng

6.5 AÛnh chuyeån ñoäng trong vuøng client

6.6 CImageList – coâng cuï quaûn lyù boä aûnh cuøng côõ

6.7 CRgn – Cöûa soå coù hình daïng tuøy yù

CHÖÔNG 7 : MENU – PHÍM TAÉT

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öû duïng menu resource

7.4 Muïc xöû lyù command message töø muïc choïn cuûa menu

7.5 Phím taét (hot key ) cho muïc choïn treân menu

7.6 Lôùp quaûn lyù menu – CMenu

7.7 Xöû lyù ñieàu khieån muïc choïn cuûa menu

CHÖÔNG 8 : CAÙC LÔÙP ÑOÁI TÖÔÏNG NHAÄP LIEÄU

( WINDOWS CONTROLS )

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

CHÖÔNG 9 : HOÄP HOÄI THOAÏI

9.1 Hoäp hoäi thoaïi (Dialog)

9.2 Lôùp CDialog

9.3 Taïo vaø söû duïng dialog trong chöông trình

9.3.1 Taïo dialog resource

9.3.2 Khai baùo lôùp keá thöøa CDialog söû duïng dialog resource

9.3.3 Söû duïng dialog trong chöông trình

9.4 Lieân keát giöõa dialog vaø caùc thaønh phaàn khaùc

9.5 Söû duïng dialog laøm giao dieän chính cuûa öùng duïng

9.5.1 Thöïc hieän öùng duïng vôùi giao dieän chính laø dialog

9.5.2 Duøng MFC wizard taïo öùng duïng vôùi giao dieän dialog

9.6 Khai baùo bieán cho control treân dialog

9.7 Khai thaùc caùc tieän ích hoã trôï

CHÖÔNG 10 : KHUNG CÖÛA SOÅ GIAO DIEÄN CHÍNH

10.1 Khung cöûa soå giao dieän (Frame Window)

10.2 Thanh traïng thaùi (statusbar) & lôùp CStatusbar

10.3 Thanh coâng cuï (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 Thieát keá ToolBar resource

10.3.2 Duøng toolbar resource cho CToolBar cuûa FrameWnd

10.4 Lôùp CFrameWnd

10.5 Söû duïng frame window laøm giao dieän chính

10.5.1 Thöïc hieän öùng duïng vôùi giao dieän frame window

10.5.2 String Table vaø CFrameWnd

10.5.3 Duøng MFC wizard taïo öùng duïng giao dieän framewindow

CHÖÔNG 11 : CAÙC KIEÁN TRUÙC DOCUMENT – VIEW

11.1 CDocument

11.2 CView

11.3 CFrameWnd

11.4 CDoctemplate

11.5 Hoã trôï töø phía ñoái töôïng quaûn lyù öùng duïng

11.6 Trình töï taïo laäp caùc ñoái töôïng tham gia boä DVF

11.7 Text Document Appication

11.8 Rich Text Format (rtf) Document Appication

11.9 HTML Document View Appication

11.10 Moät soá lôùp view ñaëc bieät

11.10.1 CListView

11.10.2 CTreeView

11.10.3 CSplitterWnd

11.10.4 Söû duïng splitterwnd trong frame window

11.10.5 Caùc ví duï thöïc haønh

CHÖÔNG 12 : MOÄT SOÁ VAÁN ÑEÀ TRONG WINDOWS

12.1 Taäp tin INI

12.2 System Registry

12.3 Vuøng Status Area treân Taskbar

12.4 ÖÙng duïng ScreenSaver

12.4.1 Ñaëc ñieåm

12.4.2 Tham soá doøng leänh

12.4.3 Ñaëc ñieåm giao taùc vôùi ngöôøi duøng

12.4.4 Thöïc hieän öùng duïng ScreenSaver ñôn giaûn

12.5 ÖÙng duïng söû duïng nhieàu tieåu trình

12.5.1 Tieåu trình xöû lyù noä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 Tieåu trình giao dieän

12.5.3 Caùc haøm hoã trôï

12.6 Laäp trình Multimedia vôùi MCI

12.7 AÁn ñònh moät soá tính naêng cuûa Windows

12.8 Baãy (hook) message (Windows Hook)

12.8.1 Caùc kieåu hook (Hook Type)

12.8.2 Danh saùch hook (Hook Chain)

12.8.3 Thuû tuïc hook (Hook Procedure)

12.8.4 Caùc dòch vuï lieân quan hook

12.8.5 ÖÙng duïng hook messages cuûa keyboard

12.9 Caøi ñaët cheá ñoä thöïc hieän öùng duïng töï ñoäng

CHÖÔNG 13 : MFC VÔÙI INTERNET

13.1 Giao thöùc truyeàn thoâng TCP/IP

13.1.1 Giôùi thieäu

13.1.2 Kieán truùc cuûa giao thöùc TCP/IP treân moâ 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 Laäp trình TCP/IP vôùi Winsock

13.2.1 Port

13.2.2 Socket

13.2.3 Moät soá caáu truùc döõ lieäu cuûa Winsock API

13.2.4 Moät soá dòch vuï cuûa Winsock API

13.3 MFC vôùi laäp trình Winsock

13.3.1 Khôûi ñoäng Winsock

13.3.2 Lôùp CAsyncSocket

13.4 Laäp trình Winsock cho giao thöùc UDP

13.5 Laä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 duïng göûi mail vaø nhaän mail

13.6.2 Thieát keá öùng duïng göûi mail

13.7 TCP vôùi Pop3 (Post Office Protocol – Version 3)

13.7.1 Qui öôùc giöõa öùng duïng mail client vaø 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 Thieát keá öùng duïng nhaän mail

13.8 TCP vôùi HTTP vaø 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 hieän öùng duïng FTP client ñôn giaûn

13.8.8 Thöïc hieän öùng duïng HTTP client ñôn giaûn

Phuï luïc A: MOÄT SOÁ VAÁN ÑEÀ

LAÄP TRÌNH HÖÔÙNG ÑOÁI TÖÔÏNG

A.1 Laäp trình höôùng ñoái töôïng (OOP)

A.2 Caùc khaùi nieäm

A.2.1 Lôùp (Class)

A.2.2 Ñoái töôïng (Object)

A.2.3 Thuoäc tính (Attribute)

A.2.4 Haønh vi (Method)

A.2.5 Chöông trình (Program)

A.3 Ñaëc ñieåm laäp trình höôùng ñoái töôïng

A.4 Phaân loaïi thuoäc tính vaø haønh vi

A.5 Caùc haønh vi ñaëc bieät

A.6 Khai baùo lôùp, ñoái töôïng trong C++

A.6.1 Khai baùo lôùp

A.6.2 Khai baùo ñoái töôïng

A.6.3 Söû duïng ñoái töôïng trong chöông trình

A.7 Keá thöøa trong C++

A.7.1 Keá thöøa haønh vi taïo laäp

A.7.2 Keá thöøa haønh vi huûy boû

A.7.3 Thöïc hieän haønh vi lôùp cô sôû

A.8 Khai baùo haønh vi toaùn töû soá hoïc

A.9 Con troû this

A.10 Haønh vi virtual

A.11 Thuoäc tính vaø haø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

LÔØI MÔÛ ÑAÀU Y

^

]

Z

Ngoân ngöõ laäp trình C++ ñöôïc bieát ñeán nhö laø moät trong nhöõng ngoân ngöõ

laäp trình maïnh nhaát nhôø khaû naêng cuûa noù trong vieäc trieån khai phaàn meàm

ôû caùc möùc ñoä khaùc nhau. Töø möùc heä thoáng ñeán möùc öùng duïng, töø laäp trình

caáu truùc ñeán laäp trình höôùng ñoái töôïng, töø laäp trình döïa treân thuaät giaûi ñeán

laäp trình trí tueä nhaân taïo, vaø töø laäp trình cô sôû döõ lieäu ñeán laäp trình cô sôû

tri thöùc…, baát cöù ñaâu, khi maø ngöôøi laäp trình muoán theå hieän yù töôûng khoa

hoïc vaø ngheä thuaät cuûa mình treân maùy tính thì C++ laø moät ñieàu nghó ñeán

tröôùc tieân.

Nhöng duø yù töôûng coù bay boång theá naøo ñi nöõa thì cuõng khoâng theå boû qua

vaán ñeà caøi ñaët maø moâi tröôøng cho öùng duïng laø ñieàu phaûi quan taâm. Vôùi xu

höôùng söû duïng heä ñieàu haønh Microsoft Windows nhö hieän nay, chuùng ta

buoäc phaûi nghó ñeán vieäc caøi ñaët öùng duïng cuûa mình trong moâi tröôøng naøy

vaø khai thaùc noù sao cho öùng duïng hoaït ñoäng hieäu quaû nhaát.

Microsoft Visual C++, saûn phaåm cuûa Microsoft, vôùi khaû naêng bieân dòch öu

vieät vaø loái khai thaùc heä thoáng roäng môû nhôø taäp hôïp lôùp thö vieän MFC cho

C++ coù ñaày ñuû caùc tieän ích giuùp chuùng ta veùt ñöôïc moïi ngoõ ngaùch cuûa

Windows haàu phuïc vuï cho öùng duïng cuûa mình.

Töø nhöõng nhaän ñònh noùi treân, cuoán saùch naøy ñöôïc thöïc hieän ñeå cuøng caùc

baïn baét ñaàu laøm quen laäp trình trong Windows aùp duïng kyõ thuaät laäp trình

höôùng ñoái töôïng vôùi C++, nhaèm khai thaùc hieäu quaû thö vieän MFC vaø töøng

böôùc du nhaäp vaøo theá giôùi tuyeät vôøi naøy thoâng qua caùc öùng duïng ñöôïc saép

xeáp theo caùc caáp ñoä tieán trieån phuø hôïp.

Trong laàn xuaát baûn ñaàu tieân, cuoán saùch naøy chaéc khoâng traùnh khoûi thieáu

soùt. Chuùng toâi raát mong tieáp thu yù kieán ñoùng goùp vaø trao ñoåi cuøng baïn ñoïc.

Cuoái cuøng, chuùng toâi xin chaân thaønh caûm ôn baïn beø, ñoàng nghieäp ñaõ cung

caáp nhöõng nhaän xeùt vaø kieán thöùc quí baùu ñeå thöïc hieän cuoán saùch naøy. Xin

caûm ôn caùc baïn hoïc vieân-sinh vieân, nhöõng ngöôøi ñaõ cuøng laøm vieäc vôùi

chuùng toâi qua noäi dung naøy vaø ñaõ coù nhöõng yù kieán khaùch quan giuùp chænh

söûa cuoán saùch kòp thôøi.

Thaønh phoá Hoà Chí Minh, ngaøy 19.11.2002

Taùc giaû

TAØI LIEÄU THAM KHAÛO

[1] Richard Simon, Windows 95 - Win32 Programming API-BIBLE,

Waite Group Press 1996.

[2] Jeff Prosise, Programming Windows 95 with MFC, Microsoft Press.

[3] M. Tracy, Professional Visual C++ ISAPI Programming, Wrox Press.

[4] Dr. GUI, Microsoft Developer Network - MSDN,

Microsoft Corporation Software.

[5] Dino Esposito,Visual C++ Windows Shell Programming, Wrox Press.

YX WZ

PHAÀN MEÀM CAÀN CAØI ÑAËT:

- Microsoft Visual C++ 6.0 hoaëc Microsoft Visual C++ .NET.

- MSDN ( Microsoft Developer Network ), baûn thaùng 10/2003.

MAÕ NGUOÀN:

Source Code cuûa caùc ví duï minh hoïa trong cuoán saùch naøy vaø cuûa moät soá

chöông trình troø chôi maø chuùng toâi mong muoán chia xeû cuøng baïn ñoïc

ñöôïc löu trong ñóa meàm ñính keøm, vaø coù theå download töø ñòa chæ:

http://thanh.andisw.com/?id=16&id2=85

WEB SITE:

Source Code ñaëc saéc cuûa nhieàu taùc giaû treân theá giôùi coù theå 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

LIEÂN HEÄ:

- Taùc giaû: Leâ Ngoïc Thaïnh

- Cô quan: Khoa Tin Hoïc Quaûn Lyù, Tröôøng ÑHKT TP.HCM

Ñòa chæ: 279 Nguyeãn Tri Phöông Q10, TP.HCM.

- Ñòa chæ e-mail: [email protected]

[email protected]

Moät soá khaùi nieäm laäp trình trong moâi tröôøng Windows 1

CHƯƠNG 1:

M

ột s

ố khái ni

ệm L

ập trình

Trong môi trường Windows

1.1 CHƯƠNG TRÌNH (PROGRAM):

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 chuyên 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

ỨNG D

ỤNG (APPLICATION):

Khi m

ột chương trình được cài đặt trên máy tính để s

ử d

ụng, ta g

ọi đó

ứ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 (PROCESS):

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.

1.4 TI

ỂU TRÌNH (THREAD):

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 (main hay WinMain)

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:

2 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

ƒ Ti

ểu trình giao di

ện (user-interface thread): Có nhi

ệm v

ụ x

ử lý các yêu

c

ầu c

ủa người dùng trong quá 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 toán bên trong, không tr

ực ti

ếp nh

ận yêu c

ầu c

ủa người dùng.

2 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):

Thông

điệp (message) là giá trị ph

ản ánh m

ột n

ội dung giao ti

ếp hay

yê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 Ngu

ồn g

ốc message:

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 Các lo

ại message:

ƒ 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 toà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.

Moät soá khaùi nieäm laäp trình trong moâi tröôøng Windows 3

1.5.3

S

ố hi

ệu message (Message Indentifier - MessageID):

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ị

nguyên 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

Ð

ặc t

ả message:

Ð

ể đối tượng nh

ận message có thêm thông tin v

ề hoà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 tagMSG {

HWND hwnd; // Giá trị có kích thước 4 bytes (long)

UINT message; // S

ố hi

ệu c

ủa message

WPARAM wParam; // Giá trị không âm có kích thước 2 bytes

LPARAM lParam; // Giá trị không âm có kích thước 4 bytes

DWORD time; // Th

ời điểm sinh ra messsge

POINT pt; // T

ọa độ cursor khi message được g

ửi.

} MSG;

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.

) 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

ỬA S

Ổ GIAO DI

ỆN (WINDOW) C

ỦA

ỨNG D

ỤNG:

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à

4 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

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

ửa s

ổ.

ƒ 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: Ngoà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 WindowProc (

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 yê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 nguyên t

ắc, n

ếu message được

x

ử lý hoàn t

ất thì hàm tr

ả v

ề giá trị 0, ngược l

ại (message không thu

ộc

Moät soá khaùi nieäm laäp trình trong moâi tröôøng Windows 5

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:

LRESULT DefWindowProc( // Default Window Procedure

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:

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 nguyên 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 quá 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 yê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.

2 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 GetMessage (

LPMSG lpMsg, // Con tr

ỏ đến bi

ến MSG nh

ận thông tin

HWND hWnd, // Handle c

ủa c

ửa s

ổ liên quan

UINT wMsgFilterMin, // S

ố hi

ệu message nh

ỏ nh

ất nh

ận được

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

6 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

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ị nguyên. 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 PeekMessage(

LPMSG lpMsg; // . Nh

ư GetMessage

HWND hWnd;

UINT wMsgFilterMin;

UINT wMsgFilterMax;

UINT wRemoveMsg; // Có th

ực hi

ện xóa message không ?

// 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 TranslateMessage(

CONST MSG *lpMsg; // con tr

ỏ đến bi

ến ch

ứa message

);

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.

Moät soá khaùi nieäm laäp trình trong moâi tröôøng Windows 7

ƒ Ð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ý

message thông qua hàm WindowProc của nó (1.6). Như vậy, ta có

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 DispatchMessage(

CONST MSG *lpmsg; // Con trỏ đến biến chứa message

);

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ó.

) Quá 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). Quá 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 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 KIẾN TRÚC XỬ LÝ CỦA ỨNG DỤNG TRONG WINDOWS:

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).

2 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 yêu cầu xử lý.

8 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

Kiến trúc xử lý chung của ứng dụng trong môi trường windows

1.9 RESOURCE CỦA ỨNG DỤNG:

Ðối với một chương trình trong windows, ngoà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:

ƒ Cursor: Ả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 đó.

ƒ Bitmap: 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.

ƒ Dialog: 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.

ƒ Icon : Ả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.

ƒ HTML (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.

Moät soá khaùi nieäm laäp trình trong moâi tröôøng Windows 9

ƒ Menu : 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

ƒ String Table: 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.

ƒ ToolbarBitmap: 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.

ƒ Version: Phần khai báo các thông tin liên quan đến ứng dụng, tác giả.

ƒ Font: Chứa thông tin về bộ font chữ được lưu trong tập tin fnt.

ƒ Custom Resource: 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.

10 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

CHƯƠNG 2:

Th

ư vi

ện MFC c

ủa microsoft

&

ứng d

ụng c

ơ b

ản trong windows

2.1 TH

Ư VI

ỆN MFC (MICROSOFT FOUNDATION CLASS):

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 hoà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 TI

ẾP C

ẬN MFC:

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

ẠO

ỨNG D

ỤNG WINDOWS V

ỚI MFC NH

Ư TH

Ế NÀO ?:

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.

Thö vieän MFC cuûa Microsoft & öùng duïng cô baûn trong windows 11

2.4

L

ỚP QU

ẢN LÝ TI

ỂU TRÌNH CWinThread:

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 m_nThreadID : Thu

ộc tính l

ưu s

ố hi

ệu c

ủa ti

ểu trình.

ƒ CWnd* m_pMainWnd : L

ưu con tr

ỏ đối tượng c

ửa s

ổ giao di

ện

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.

ƒ CWinThread( ); Hành vi t

ạo l

ập (constructor) đối tượng ti

ểu trình.

ƒ virtual BOOL InitInstance( ); Kh

ởi t

ạo thông s

ố cho đối tượng ti

ểu

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

m_pMainWnd.

ƒ virtual int ExitInstance( ); Hành vi k

ết thúc c

ủa đối tượng ti

ểu trình.

Thông qua hành vi này, đối tượng qu

ản lý ti

ểu trình th

ực hi

ện hoàn

tr

ả các tài nguyên c

ủa h

ệ th

ống mà nó

đã đăng ký s

ử d

ụng.

ƒ virtual int Run( ); 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.

ƒ virtual BOOL PreTranslateMessage(MSG *pMsg); Hành vi cho

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 yêu c

ầu đặt

ra cho

ứng d

ụng.

) 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ự.

12 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

2.5

L

ỚP QU

ẢN LÝ TI

ỂU TRÌNH GIAO DI

ỆN CHÍNH CWinApp:

CWinApp, k

ế th

ừa t

ừ CWinThread, là l

ớp đối tượng chuyên 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. Ngoà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* m_pszAppName: L

ưu chu

ỗi tên c

ủa

ứng d

ụng.

ƒ LPTSTR m_lpCmdLine: L

ưu n

ội dung chu

ỗi tham s

ố dòng l

ệnh.

Tham s

ố dòng l

ệnh là toà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.

ƒ int m_nCmdShow: L

ưu giá trị thông s

đã được dùng để kích ho

ạt

c

ửa s

ổ giao di

ện chính c

ủa

ứng d

ụng.

ƒ CWinApp( ); T

ạo l

ập đối tượng ti

ểu trình chính.

ƒ HCURSOR LoadCursor( int nID ); N

ạp cursor t

ừ resource c

ủa

ứng

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.

ƒ HICON LoadIcon ( int nID ); N

ạp icon t

ừ resource c

ủa

ứng d

ụng

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 DoMessageBox (

LPCTSTR lpszPrompt, // N

ội dung thông báo

UINT nType, // D

ạng h

ộp thông báo

UINT hlpIndex = 0 // S

ố hi

ệu m

ục giúp đỡ (WinHelp)

);

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 AfxMessageBox (

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.

• Các thông số qui định các nút chọn bố trí trong hộp thông báo:

Giá trị thông s

ố Nút ch

ọn b

ố trí trong h

ộp

Thö vieän MFC cuûa Microsoft & öùng duïng cô baû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

• Các thông số qui định biểu tượng dùng trong nút chọn:

Giá trị thông s

ố Bi

ểu tượng

MB_ICONHAND, MB_ICONSTOP,

MB_ICONERROR

MB_ICONQUESTION

MB_ICONEXCLAMATION, MB_ICONWARNING

MB_ICONASTERISK, MB_ICONINFORMATION

• Số hiệu các nút chọn được sử dụng trong hộp thông báo:

S

ố hi

ệu Nút ch

ọn

S

ố hi

ệu Nút ch

ọn

IDABORT

Abort IDOK

OK

IDCANCEL

Cancel IDRETRY

Retry

IDIGNORE Ignore IDYES

Yes

IDNO

No

• 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à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.

14 Laäp trình Windows vôùi MFC - Microsoft Visual C++ 6.0 - Leâ Ngoïc Thaïnh - [email protected]

2.6 THỰC HIỆN ỨNG DỤNG ÐƠN GIẢ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ụ C:\VC6.

ƒ Thực hiện ứng dụng Microsoft Visual C++ 6.0 (VC).

ƒ Chọn mục File / New từ hệ thống menu của VC.

ƒ Trong hộp hội thoại New, chọn trang Projects :

- Win32 Application : Loại ứng dụng thực hiện.

- Location : Ðường dẫn thư mục của dự án.

- Project Name : Tên dự án.

Sau đó chọn OK.

ƒ Tiếp theo, trong hộp hội thoại Step 1 of 1.

- An empty project : Tạo dự án rỗng.

- Finish : Hoàn tất việc khởi tạo dự án.

Thö vieän MFC cuûa Microsoft & öùng duïng cô baûn trong windows 15

ƒ VC hiển thị hộp hội thoại New Project Information để thông báo

các thông tin liên quan đến dự án vừa tạo. Chọn OK.

) 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, toà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 để hoàn tất dự án theo yêu cầu.

ƒ Ðăng ký sử dụng lớp CWinApp của thư viện MFC: Lớp CWinApp

được khai báo trong afxwin.h của MFC. Bổ sung tập tin stdafx.h

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:

• Chọn mục File / New từ hệ thống menu của VC.

• Trong hộp hội thoại New, chọn trang Files:

- C/C++ Header File : Loại nội dung tập tin (.h).

- Add To Project : Bổ sung tập tin vào dự án VD0.

- File Name : Tên tập tin (StdAfx.h)

Chọn OK, tiếp tục thực hiện các công việc sau.

• Soạn thảo tập tin stdafx.h, 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:

Tải ngay đi em, còn do dự, trời tối mất!