Tài liệu Lập trình Window với MFC - Pdf 91



:
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

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

:

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

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

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


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

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

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]
,

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

này, ta có mt tin trình ca ng dng NotePad.

1.4
 :
Tiu trình là mt nhánh x lý ục lp trong tin trình. Khi mt ng
dng ục thc hin ta có thêm mt tin trình. Do bn cht chng trình
làm nên ng dng ụó bao gm chng trình chính (
hay )
và các chng trình con mà tin trình ng vi nó có th tách thành các
nhánh x lý: mt nhánh x lý chính (primary thread), các nhánh x lý ph
(other threads). Các nhánh x lý này gi là các tiu trình. Có hai loi tiu
trình:
2 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ Tiu trình giao din (user-interface thread): Có nhim v x lý các u
cu ca ngi dùng trong q trình giao tác vi h.
̇ Tiu trình x lý ni (worker thread)
: Có nhim v thc hin các x lý
tính tốn bên trong, khơng trc tip nhn u cu ca ngi dùng.
Q Thc ra, có th xem tiu trình giao din nh là mt tiu trình x lý ni
nhng có tính nng giao tác vi ngi s dng.

1.5
 :
Thơng ụip (message) là giá tr phn ánh mt ni dung giao tip hay
u cu x lý gia h thng (windows) và ng dng, gia các ng dng
vi nhau hoc gia các thành phn trong cùng mt ng dng.
1.5.1
 
:
C windows và ng dng ụu có th phát sinh message.

ngun khơng âm ụ ục t, giá tr này gi là s hiu message.
Các message do windows ụnh ngha có s hiu ục khai báo sn
và duy nht vi các hng s xác ụnh và tên gi gi nh ca chúng có
dng WM_
xxx
. Các messges do ngi dùng ụnh ngha cng phi ụng
ký s hiu. S hiu ụng ký khơng ục trùng lp và có giá tr nh nht
bng WM_USER (mt hng s do windows ụnh ngha).
S hiu message là c s ụ phân bit các message ln nhau.

1.5.4 Ð
  :
Ð ụi tng nhn message có thêm thơng tin v hồn cnh phát
sinh và ý ngha c th ca message, windows cho phép message ục
nhn thơng qua mt cu trúc cha s hiu message và các thơng s
kèm theo. Cu trúc này ục khai báo thành kiu MSG vi ni dung nh
sau:

typedef struct
{
HWND
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

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 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
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

(uMsg) ụ chn x lý phù hp. Theo ngun tc, nu message ục
x lý hồn tt thì hàm tr v giá tr 0, ngc li (message khơng thuc
Một số khái niệm lập trình trong mô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
( // 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

(
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 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
con tr tham s
plMSG
. Khi ụã ly ục mt message, hàm kt thúc
và tr v mt giá tr ngun. Nu message nhn ục là message kt
thúc ng dng (s hiu WM_QUIT) thì hàm tr v giá tr 0. Ngc li,
hàm tr v giá tr khác 0.

̇ Kim tra và ly mt message trong message queue ca ng dng
:
BOOL
(

);
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.
Một số khái niệm lập trình trong mô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
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
(
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ý

s này làm ca s giao din chính: Hàm WindowProc ca ca s s
tip nhn và x lý message ục ụiu phi t MessageLoop ca tiu
trình chính. Ngi dùng có th giao tác và kt thúc ng dng ục.
̇ Nh mc th ba, ụng thi to ra các tiu trình phc v: ng dng có
kh nng tip nhn và thc hin ụng thi nhiu u cu x lý.

8 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
    

1.9
  
Ði vi mt chng trình trong windows, ngồi phn mã lnh ca các
hàm x lý, resource là mt thành phn khơng kém phn quan trng cha
các ni dung h tr cho vic trang trí hoc phc v cho mt mc ụích ục
bit ca ng dng. Các ni dung ph bin trong resource nh sau:
̇
nh nh ục t v trí làm vic ca thit b liên quan nh
mouse, pen, trackball. Khi ngi dùng tác ụng lên nhng thit b này
thì windows s dng cursor ụ phn ánh hin tng ụó.
̇
: Tp nh ụim (pixels) ca mt nh. Các nh ụim này b trí
theo các dòng và phi hp làm nên hình nh ca ụi tng.
̇
: Thơng tin mơ t khung giao din vi các ụi tng nhp liu
bên trong, là c s ụ to ra các hp hi thoi trong ng dng.
̇
: nh nh ục dùng ụ ục t chc nng ca mt ụi tng,


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

  
   

2.1
 
:
Th vin MFC ca Microsoft bao gm các lp c bn, cài ụt bng
ngơn ng C++, h tr vic lp trình trong mơi trng windows. T các lp
này, MFC xác lp nn tng hình thành ng dng ca windows, bao gm
vic ụnh ngha b khung ng dng, các cơng c chun và ph bin ụ
b sung vào b khung nói trên nhm to ra ng dng hồn chnh. Vi
MFC, cơng vic ca ngi lp trình ch
 còn là vic la chn các thành
phn cn thit, ụiu chnh và phi hp chúng hp lý ụ có ục ng
dng kt qu mong mun.

Lp trình windows vi MFC và MicroSoft Visual C++ 6.0 (VC) ụt
ục hiu qu cao bi khơng ch khai thác ục phiên bn mi nht ca
MFC mà còn nhn ục nhiu tin nghi lp trình mà VC cung cp. Ðây là
con ụng ngn và ụn gin, ục bit vi ngi t hc, ụ vit ng dng
windows.

2.2
  :
MFC là th vin khng l vi khong 200 lp ụi tng mà vic hiu
rõ và vn dng chúng trong mt khong thi gian ngn là khơng th

thơng qua các thuc tính và hành vi ca nó.
̇ DWORD

: Thuc tính lu s hiu ca tiu trình.
̇ CWnd*
: 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.
̇
( ); Hành vi to lp (constructor) ụi tng tiu trình.
̇ virtual BOOL
( ); 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
.
̇ virtual int
( ); 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 hồn
tr các tài ngun ca h thng mà nó ụã ụng ký s dng.
̇ virtual int
( ); Hành vi dành riêng cho tiu trình giao din, nó
thc hin vòng lp nhn message, chuyn message cho hành vi
PreTranslateMessage ca lp. Nu hành vi này tr v giá tr 0 thì
message s tip tc ục chuyn ụn các hàm din dch phím
TranslateMessage và hàm ụiu phi message DispatchMessage.
̇ virtual BOOL

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
: 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.
̇
( ); To lp ụi tng tiu trình chính.
̇ HCURSOR
( 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
( 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
(
LPCTSTR
lpszPrompt

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 Biu tng
MB_ICONHAND, MB_ICONSTOP,
MB_ICONERROR

MB_ICONQUESTION

MB_ICONEXCLAMATION, MB_ICONWARNING

MB_ICONASTERISK, MB_ICONINFORMATION •
S     
:

S hiu Nút chn S hiu Nút chn
IDABORT Abort IDOK OK

̇ Thc hin ng dng Microsoft Visual C++ 6.0 (VC).
̇ Chn mc
/ t h thng menu ca VC.
̇ Trong hp hi thoi
, chn trang
Projects
:
-
: Loi ng dng thc hin.
-
: Ðng dn th mc ca d án.
-
: Tên d án.
Sau ụó chn
.

̇ Tip theo, trong hp hi thoi
.
-
: To d án rng.
-
: Hồn tt vic khi to d án.
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 15
̇ VC hin th hp hi thoi ụ thơng báo
các thơng tin liên quan ụn d án va to. Chn
.
H


• Son tho tp tin
, nhp các ụnh hng biên dch và
các ch th s dng th vin MFC cn cho d án:
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 dch khơng thc hin lp ch th
#include#include <afxwin.h> // th vin chun ca MFC
#endif
Sau khi nhp xong ni dung tp tin , chn mc /
(hoc click biu tung
trên thanh cơng c) ụ lu tp tin.
̇ To tp tin
ca d án: Tp tin này cha khai báo
ca các resource ục s dng trong ng dng. Khi biên dch, các
resource này s ục nhúng vào tp tin chng trình (.EXE). Các
bc to tp tin
trong d án nh sau:
• Chn mc
/ . Trong hp hi thoi , chn trang
.

-
: Loi ni dung tp tin (.rc).


: Phiên bn ụem giao, khơng cha thơng
tin debug.
Chn mc
/ :

Chn phiên bn biên dch ( chng hn
). Chn .
18 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ n ụnh biên dch vi th vin MFC: Chn mc /
Trong hp hi thoi
,
-
: : Chn phiên bn n ụnh (ví d: Win32 Debug ),
-
: Các n ụnh chung cho d án.
: Cách liên kt th vin MFC vào
ng dng. Có th tùy chn mt trong hai cách sau:
Ÿ Use MFC in Shared DLL
: Chng trình s dng th vin
MFC theo c ch liên kt ụng. Tp tin chng trình có kích
thc nh nhng khi thc hin cn có các tp tin th vin
(DLL) ca MFC trong th mc h thng ca windows.
Ÿ Use MFC in Static Library
: Th vin MFC ục nhúng vào
chng trình trong lúc biên dch. Tp tin chng trình có kích
thc ln hn nhng ng dng có th hot ụng ục lp.

̇ Chy chng trình: Có th chy chng trình trc tip trong VC
bng cách nhn phím F5 hoc click chn
trên thanh cơng c.

 : ng dng VD0 khơng thc hin mt giao tác hay cơng vic
gì c bi nó ch là mt ng dng khung - ục xây dng hồn tồn t
lp CWinApp ca MFC mà khơng có mt x lý b sung nào.
2.7
     N
:
20 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
Trong phn này ta thit k mt ng dng mà khi thc hin s hin th
hp thơng báo "
Do You want to Stop
" vi biu tng và các nút chn
YES- NO. ng dng kt thúc khi ngi dùng chn mc YES.
Nhn xét
: ng dng ch hồn thành cơng vic xác ụnh khi ụi tng
qun lý tiu trình chính ca ng dng tin hành x lý thích hp. Ði tng
này thuc lp k tha t lp CWinApp vi x lý b sung nhm thc hin
cơng vic mong mun. Hành vi
ca CWinApp là hành vi
thích hp cho vic k tha và thc hin các b sung này.
Gi s d án ca ng dng có tên là
. Các bc thc hin nh
sau:
̇ To d án VD01 theo các bc nh d án VD0 nhng dng li 
bc "
 
" (khơng thc hin

Sau ụó chn
.
Ÿ
=
CWinApp
: Chn CWinApp làm lp c s.
Ÿ
=
public
: K tha public. Chn ụ kt thúc.
• Lp CEmpApp ụã ục b sung vào d án VD01 cùng vi hai
tp tin là VD01.H và VD01.CPP:
Ÿ
: Cha ni dung khai báo (header) ca lp.
Ÿ
: Cha ni dung cài ụt (implement) ca lp.
Có th m và chnh sa ni dung các tp tin ca lp bng cách
thao tác trc tip trên cu trúc
ca màn hình
.
22 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

• Ðiu chnh lp
ụ nhn ục h tr ca ClassWizard:
Ÿ M tp tin
cha khai báo ca lp, b sung các ni
dung:

class CEmpApp : public CWinApp {
public: ();

//}}AFX_MSG_MAP //
s ụ cp ụn  các

END_MESSAGE_MAP() //
phn sauPhn b sung
B sung
Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 23
̇ Khi to thơng tin : Thao tác này là c s ụ khai thác
tin ích ca ClassWizard trong vic ụnh ngha lp, khai báo thơng
tin k tha, n ụnh x lý message, ụnh ngha bin,.
• Chn menu
/ :
• Chn
:
Chn
, sau ụó chn .
• Trong hp hi thoi
, Chn ụ kt thúc.
Thơng tin
ục lu trong tp tin có cùng tên vi tên
ca d án và phn m rng là .


do {
stop = AfxMessageBox( "Do You want to stop",
MB_YESNO | MB_ICONQUESTION, 0 );
} while (stop == IDNO ); //
Tip tc lp nu chn NO

return TRUE; // X
 lý tin hành bình thng

}

̇ Dùng lp CEmpApp khai báo ụi tng qun lý tiu trình chính ca
ng dng: M tp tin ca lp CEmpApp, b sung ni
dung:

#include "stdafx.h"
#include "Emp.h"
CEmpApp ; // Ði tng kiu CEmpApp, dùng qun lý
// tiu trình chính ca ng dng.
// Khơng chnh sa các ni dung khác!

̇ Biên dch và chy chng trình.

2.8 T
    :
Ði vi ng dng trong windows, icon khơng ch là hình nh trang trí
ụn thun mà còn là yu t gi nh v ng dng tt nht. Windows s
dng icon ca ng dng ụ ụi din cho ng dng  tt c nhng ni nào
mà ngi dùng có th nhìn thy và khai thác ng dng.

Thư viện MFC của Microsoft & ứng dụng cơ bản trong windows 27
̇ Thc hin n ụnh thơng s ca icon thơng qua hp hi thoi sau:
-
ID
: S hiu icon. là s hiu qui c
dùng cho icon chính ca ng dng.
- : Tên tp tin cha icon. là th mc con s ục
to trong th mc d án ụ cha các tp tin
resource.
Sau khi n ụnh xong, gõ phím
ụ kt thúc.
̇ Ðóng màn hình thit k icon resource.
̇ Biên dch d án. Dùng
xem tp tin VD01.exe
trong th mc debug ca d án. Lúc này, ng dng VD01 ụã có
icon riêng.

2.9 L
  N:
Sau khi hồn tt d án, mt vic rt thng xun là lu gi li
chng trình ngun ca d án. Cơng vic này ụòi hi phi loi b khi
th mc d án các tp tin khơng cn thit. Ðó là các tp tin sau:
̇ Th mc d án : Các tp tin .NCB, .PLG, .OPT, .APS.
̇ Th mc Debug : Tt c các tp tin, tr tp tin .exe cn gia li.
̇ Th mc Release : Tt c
 các tp tin, tr tp tin .exe cn gia
li.

); Ðt ký t
ch
vào v trí
nIndex
.
̇ operator
( ) const; Chuyn v kiu chui ca C.
̇ CString::operator =
; Phép tốn gán chui cho ụi tng.
̇ CString::operator +
; Phép tốn cng chui.
̇ CString::operator
; Phép tốn ni chui mi vào ụi tng.
̇ CString Comparison
; Trong ụó là phép tốn
quan h thơng thng nh: == , < , <= , > , >= , !=.
̇ CString
( int
nFirst
[, int
nCount
] ) const; Trích chui con gia.
̇ CString
( int
nCount
) const; Trích chui con bên trái.
̇ CString
( int
nCount
) const; Trích chui con bên phi.

pMsg

);
typedef struct {
UINT cbSize; // Kích thc, = sizeof( MSGBOXPARAMS )
HWND hwndOwner; // Handle ca ca s cha, có th = NULL
HINSTANCE hInstance; // Handle ng dng =
AfxGetInstanceHandle()
LPCTSTR lpszText; // Ni dung chui thơng báo
LPCTSTR lpszCaption; // Ni dung chui tiêu ụ
DWORD dwStyle; // Dng hp, cha thơng s MB_USERICON
LPCTSTR lpszIcon; // Chui tên icon ục hin tr trong hp
DWORD_PTR dwContextHelpId; // S hiu giúp ụ
MSGBOXCALLBACK lpfnMsgBoxCallback; // Hàm x lý
DWORD dwLanguageId; // S hiu ngơn ng s dng
} , * ;
Các lớp giao diện đồ họa của MFC 29
:

   

3.1
   A:
Ð h tr ng dng trong vic trang trí giao din ụ ha (Graphic
Device Interface - GDI) nh màn hình, máy in., windows cung cp mt
h thng các cơng c ụ ha c bn nh sau:
̇
Pen
: Cơng c v ụim hoc ụng thng.
̇

các cơng c này cho phù hp vi nhu cu ca ng dng.

3.3. T
    A:
Vic ụnh v trên giao din ụ ha ục thc hin da trên h trc ta
ụ có gc (0,0) là góc trái-trên (top-left corner) ca giao din ụ ha,
chiu dng ca trc hồnh (trc x) hng t trái sang phi, chiu dng
ca trc tung (trc y) hng t trên xung di. Trên mt phng giao
din ụ ha ụó:
̇ Ðim: Biu din bng cp ta ụ (x,y).
̇ Hình ch nht: Biu din bng cp ụnh góc trái trên và góc phi
di.
Thơng tin v ụim, vùng hình ch nht và kích thc ca các ụi
tng trong mt phng giao din ụ ha ục ục t thơng qua các cu
trúc sau:
30 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
̇ Cu trúc qun lý 1 ụim:
typedef struct _POINT {
int
x
,
y
// Ta ụ ( hồnh ụ, tung ụ ) ca ụim
}
;
̇ Cu trúc qun lý 1 vùng hình ch nht
:
typedef struct _RECT {
int
top

3.4.1
 ụi  t:
̇
: Lp ụi tng ụim, tng ng vi cu trúc POINT.
̇
: Lp ụi tng vùng hình ch nht trên giao din ụ ha,
tng ng vi cu trúc RECT. CRect có các hành vi ục trng sau:

( ); To lp ụi tng vùng hình ch nht rng.

(int
left
, int
top
, int
right
, int
bottom
); To lp ụi tng
vùng hình ch nht có thơng s xác ụnh.
• int
( ) const; Tr v ụ rng vùng hình ch nht.
• int
( ) const; Tr v ụ cao vùng hình ch nht.
• void
( ); Hp lý hóa các thành phn ta ụ ca
rect mà khơng làm thay ụi v trí và kích thc ca nó.
VD
: Gi s khi to mt rect khơng hp l nh sau:
CRect rect( 100

// Màu sc ca nét v
);
nPenStyle
có th nhn mt trong các giá tr sau:
PS_SOLID : PS_DASH :
PS_DOT : PS_DASHDOT :
crColor c
ó th nhn giá tr t macro phi màu RGB( ) nh sau:
RGB (int
màu_ụ
, int
màu_xanh_lá_cây
, int
màu_xanh_dng

)
Mi màu ục ục trng bng mt giá tr trong ụon 0255 phn
ánh ụ sáng ca nó. B phi màu theo qui tc phi màu t
nhiên.
̇ BOOL
( int
nPenStyle
, int
nWidth
, COLORREF
crColor

); Khi to thơng s cho ụi tng pen. Ý ngha tham s nh trên.
̇ operator HPEN() const; Tốn t chuyn kiu, tr v handle ca
pen (HPEN) qun lý bi ụi tng.

( COLORREF
crColor
); To ục tính tơ
ục vi màu
crColor
cho ụi tng brush cha có thơng s.
̇ operator HBRUSH() const; Tốn t chuyn kiu, tr v handle ca
brush (HBRUSH) qun lý bi ụi tng.

3.4.4 L
p :
CFont là lp ụi tng qun lý font, cơng c GDI ca DC. Thơng qua
ụi tng này, DC thc hin n ụnh font, kiu dáng, kích thc ca b ký
32 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
t ục s dng cho vic hin th các ni dung vn bn. Các hành vi ục
trng:
̇
( ); To lp ụi tng font rng.
̇
(const LOGFONT*
lpLogFont
); To lp ụi tng font vi
thơng s ụy ụ. Giá tr thơng s ục n ụnh bi tham s kiu
cu trúc LOGFONT cha thơng tin. LOGFONT ục khai báo nh
sau:
typedef struct tagLOGFONT {
LONG
lfHeight
; // chiu cao ca ký t
LONG

lfQuality
; // = DEFAULT_QUALITY
BYTE
lfPitchAndFamily
; // =DEFAULT_PITCH|FF_DONTCARE
TCHAR
lfFaceName
[LF_FACESIZE]; // Chui tên ca font
} ;
H Win9x ch dùng
lfEscapement
.
̇ int
( LOGFONT *
pLogFont
); Ly thơng tin ca font
qun lý bi ụi tng font ch. Kt qu ục ụin vào bin kiu
LOGFONT ch bi tham s kiu con tr LOGFONT* :
pLogFont
.
̇ operator HFONT( ); Tốn t chuyn kiu, tr v handle ca font
ục qun lý bi ụi tng.
̇ BOOL
( LOGFONT *
lpLogFont
); Khi to thơng
s cho ụi tng font t thơng tin lu trong cu trúc ch bi
lpLogFont
.


phân gii tng ng vi DC ch bi con tr tham s
pDC
.
̇ int
( BITMAP*
pBitMap
); Ly thơng tin v bitmap ục
qun lý bi ụi tng. Kt qu nhn ục s ục ụin vào bin có
kiu BITMAP ch bi tham s kiu con tr BITMAP* :
pBitmap
.
Cu trúc
bao gm các trng có ý ngha nh sau:

typedef struct tagBITMAP { /* bm */
int
bmType
; // Kiu bitmap,
int
bmWidth
; // Chiu rng bitmap tính bng pixel
int
bmHeight
; // Chiu cao bitmap tính bng pixel
int
bmWidthBytes
; // Kích thc 1 dòng pixel trong bitmap
BYTE
bmPlanes
; // S màu.

; // S hiu palette h thng
WORD
palNumEntries
; // S màu s dng
PALETTEENTRY
palPalEntry
[1]; // Cha các giá tr màu,
// có s phn t mng bng palNumEntries
} LOGPALETTE ;
34 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -

H Mi phn t ca palPalEntry có kiu PALETTEENTRY phn ánh
giá tr màu dùng hin th màu ch mc (color index) tng ng vi v
trí th t ca nó. Cu trúc PALETTEENTRY có ni dung nh sau:

typedef struct tagPALETTEENTRY {
BYTE peRed ; // Giá tr thành phn màu ụ
BYTE peGreen ; // Giá tr thành phn màu xanh lá cây
BYTE peBlue ; // Giá tr thành phn màu xanh dng
BYTE peFlags ; // Vai trò màu trong h thng.
} ;

̇ operator
( ) const; Tốn t chuyn kiu, tr v handle
ca palette qun lý bi ụi tng.

3.4.7 L
 :
CRgn là lp ụi tng qun lý region, mt cơng c GDI quan trng
giúp DC n ụnh vùng nh x lý có hình dng tùy ý trên giao din ụ ha

lpPoints
, // Mng cha ta ụ các ụim ziczac
int
nCount
, // S phn t POINT trong mng trên
int
nMode
// = WINDING
);
Khi to thơng s cho ụi tng vùng nh bi mt ụng ziczac
khép kín qua các ụim có ta ụ xác ụnh và ục lu trong mt
mng.
int
(
CRgn*
pRgn1
, // Con tr ụi tng qun lý vùng nh th nht
CRgn*
pRgn2
, // Con tr ụi tng qun lý vùng nh th hai
int
nCombineMode
// Cách kt hp hai vùng nh
); To thơng s cho ụi tng vùng nh trên c s kt hp hai vùng
nh ụã có. Tham s
nCombineMode
có th là:
RGN_AND : Vùng nh kt qu là vùng giao nhau gia hai vùng
nh.
RGN_OR : Vùng nh kt qu là vùng hp gia hai vùng nh.

̇ CPent* ( ); Tr v giá tr con tr ca ụi tng pen
ụang ục s dng bi DC.
H M
t cách tng t cho các cơng c trang trí khác.
̇ virtual COLORREF
( COLORREF
crColor
); Ðt màu
nn cho DC.
crColor
là giá tr màu ụt.
̇ COLORREF
( ); Tr v giá tr màu nn ca DC.
̇ virtual COLORREF
( COLORREF
crColor
); n ụnh
màu ục s dng ụ hin th các ni dung vn bn trên DC.
̇ COLORREF ( ); Tr v giá tr màu hin dùng ụ hin
th các ni dung vn bn trên DC.
̇ int
( int
nBkMode
); n ụnh ch ụ hin th nn ký t
biu din ni dung vn bn.
nbkMode
cha thơng s n ụnh:
TRANSPARENT : Nn ch hin th trong sut.
OPAQUE : Ch hin th có màu nn.
̇ int Get

th.
); In ni dung chui lên giao din ụ ha ca DC vi các canh
chnh.
lpRect
: Ch ụn bin kiu RECT cha thơng tin gii hn vùng hin
th.
nFormat
: Cho phép kt hp mt cách hp lý các canh chnh trong
vùng hình ch nht gii hn. Các thơng s canh chnh có th là:
DT_CENTER : Chnh gia theo chiu ngang
DT_VCENTER : Chnh gia theo chiu dc
DT_RIGHT : Chnh phi.
̇ CPoint
( int
x
, int
y
); n ụnh ụim v hin hành.
̇ BOOL
( int
x
, int
y
); V ụng thng t ụim v hin hành
ụn ụim có ta ụ (x, y).
̇ void
(
LPCRECT
lpRect
, // Con tr ch ụn bin kiu RECT.

// Các cnh ục v.
); V khung ch nht vi hiu ng 3 chiu.
nEdge
có th kt hp các giá tr sau:
BDR_RAISEDINNER : V ni g trong
BDR_SUNKENINNER : V chìm g trong
BDR_RAISEDOUTER : V ni g ngồi
BDR_SUNKENOUTER : V chìm g ngồi
nFlags
có th kt hp các giá tr sau:
BF_RECT : V tt c các cnh
BF_TOPLEFT : V cnh trái và cnh trên
BF_BOTTOMRIGHT : V cnh phi và cnh di
̇ BOOL
(
CPoint
pt
, // Ðim ụt góc trái trên ca nh trên DC
CSize
size
, // Kích thc vùng hin th nh
CBitmap*
pBitmap
, // Con tr ụi tng bitmap ục v
Các lớp giao diện đồ họa của MFC 37
UINT
nFlags
, // = DST_BITMAP (v bitmap)
CBrush*
pBrush

ySrc
) trong DC
ngun sang vùng nhn nh bt ụu t v trí (
x
,
y
), vi kích thc
(nWidth, nHeight)
trong DC qun lý bi ụi tng.
Giá tr pixel ục chuyn vào vùng nhn nh tùy thuc vào giá tr
tham s
dwRop
. Mt s giá tr dùng cho tham s này có th nh
sau:
• SRCCOPY : Giá tr pixel ly trc tip t pixel ca nh ngun.
• SRCPAINT : Là kt qu OR ca pixel nh ngun và nh nhn.
• SRCAND : Là kt qu AND ca pixel nh ngun và nh
nhn.
̇ BOOL
(
int
x
, int
y
, // Ta ụ góc trái trên và
int
nWidth
, int
nHeight
, // Kích thc vùng nhn nh

y,
// Ta ụ góc trái trên và
int
nWidth,
int
nHeight,
// Kích thc vùng nhn nh.
CDC*
pSrcDC,
// Con tr ụi tng DC ngun.

int
xSrc,
int
ySrc,
// Ta ụ góc trái trên và
int
nSrcWidth,
int
nSrcHeight,
// Kích thc phn nh ục
chép.
38 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
DWORD
dwRop
// Cách chp pixel t nh ngun.
); Tng t BitBlt nhng nh ụích và nh ngun có th có kích
thc khác nhau nên to hiu ng co dãn nh chép ục so vi
nh ngun.
̇ BOOL

nBitmapID
, // S hiu ca resource bitmap cha các
nh
int
cx
, // Ð rng mi nh trong bitmap nói trên
int
nGrow
, // S nh trong bitmap
COLORREF
crMask
// Màu mt n (khơng hin th)
); Khi to ni dung cho ụi tng t mt bitmap trong resource.
̇ int GetImageCount( ); S nh ca imagelist qun lý bi ụi tng.
̇ int
(
CBitmap*
pbmImage
, // Con tr ụi tng bitmap ca nh
mi.
CBitmap*
pbmMask
| // Ði tng bitmap mt n hoc
[ COLORREF
crMask
] // màu mt n ca nh mi.
); Thêm mt nh (bitmap) vào imagelist.
̇ BOOL
( int
nImage

pWndLock
.
̇ static void
( ); Chm dt tác v chuyn nh.
̇ static BOOL
( BOOL
bShow
); Hin th hoc che
nh trong q trình chuyn hình.
̇ BOOL
(
CDC*
pdc
, // Ði tng DC dùng v hình
int
nImage
, // S th t hình ục v trong imagelist
POINT
pt
, // Ta ụ góc trái trên ni v hình


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status