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

Các kiến trúc document và view

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

134 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
CHƯƠNG 11:

Các KIẾN TRÚC Document & View

MFC hỗ trợ mạnh mẽ các dự án sử dụng dữ liệu, bao gồm dữ liệu dạng
văn bản (text), dạng văn bản kèm hình ảnh và đònh dạng (lưu dưới dạng văn
bản – rich text format và lưu dưới dạng mã nhò phân – compound file), dạng
lưu trữ trên các hệ quản trò cơ sở dữ liệu và truy xuất thông qua
ODBC
,
ADO
.
Ứng dụng sử dụng dữ liệu có thể dễ dàng phát triển trên VC nhờ MFC
cung cấp bộ khung chuẩn cho các dự án thao tác dữ liệu. Bộ khung này bao
gồm ba thành phần: Document-View-Frame (DVF). Trong đó:
 Document: Quản lý toàn bộ nội dung dữ liệu của ứng dụng được
lưu trữ trong bộ nhớ.
 View: Thực hiện chức năng hiển thò và quản lý một phần
dữ liệu của document.
 Frame Window: Chứa view, điều phối command message từ người
dùng đến các view một cách thích hợp.
Bộ khung này được thực hiện thông qua các lớp liên quan sau đây.

11.1 CDocument:
CDocument là lớp đối tïng quản lý một nội dung dữ liệu (Document).
 CDocument( ); Tạo lập đối tượng rỗng.
 void AddView (
CView*
pView
// Con trỏ đối tượng view


); Bổ sung view vào danh sách các view của document.
 void RemoveView (
CView*
pView
// Con trỏ đối tượng view
); Loại bỏ một view ra khỏi danh sách các view của document.
 void UpdateAllViews (
CView*
pSender
, // Đối tượng view miễn cập nhật
LPARAM
lHint
= 0L, // Số hiệu cập nhật
CObject*
pHint
= NULL // Cấu trúc chứa thông tin cập nhật
); Thông báo các view trong danh sách view của document cập nhật lại
nội dung hiển thò.
 const CString& GetTitle( ); Trả về nội dung tiêu đề của dữ liệu.
 virtual void DeleteContents( ); Xóa rỗng nội dung document.
Các kiến trúc Document & View 135
 virtual BOOL OnNewDocument( ); Hành vi được thực hiện mỗi khi đối
tượng CDocument được tạo mới; kế thừa để cài đặt khởi tạo riêng.
 virtual BOOL OnOpenDocument (
LPCTSTR
lpszPathFileName
// Đường dẫn và tên tập tin
); Hành vi được thực hiện khi đối tượng CDocument chuẩn bò nhận nội
dung từ tập tin; kế thừa để cài đặt xử lý riêng về việc đọc tập tin.
 virtual BOOL OnSaveDocument (

LPCTSTR
lpszPathName
// Đường dẫn và tên tập tin
); Hành vi được thực hiện khi nội dung của document sắp được lưu vào
tập tin. Việc kế thừa hành vi này nhằm thực hiện xử lý lưu trữ theo
cách riêng của ứng dụng.
 BOOL IsModified( ); Trả về tình trạng cập nhật dữ liệu trong document
; =TRUE (có chỉnh sửa) hoặc =FALSE (không có chỉnh sửa).

11.2 CView:
CView, lớp kế thừa từ lớp CWnd, giúp quản lý thành phần view của ứng
dụng. Trong bộ ba DVF, view là thành phần giao diện quan trọng cho phép
người dùng thao tác dữ liệu của ứng dụng một cách dễ dàng và hiệu quả.
 CView( ); Tạo lập đối tượng view.
 virtual void OnInitialUpdate( ); Hành vi được thực hiện khi đối tượng
view được kết vào danh sách các đối tượng view của document. Việc
kế thừa nhằm cài đặt các ấn đònh khởi tạo thông số cho view.
 virtual void OnActivateView (
BOOL
bActivate
, // =TRUE: kích hoạt ; và ngược lại
CView*
pActivateView
, // Đối tượng view được kích hoạt
CView*
pDeactiveView
// Đối tượng view bò ngừng hoạt động
); Hành vi được thực hiện mỗi khi đối tượng view được kích hoạt hoặc
thôi kích hoạt.
 virtual void OnActivateFrame (

UINT
nState
, // Trạng thái kích hoạt
CFrameWnd*
pFrameWnd
// Con trỏ đối tượng frame chứa view
); Hành vi được thực hiện mỗi khi đối tượng frame chứa view được kích
hoạt.
Trạng thái kích hoạt của frame chứa view có thể là:
WA_INACTIVE : Frame chứa view ngừng hoạt động.
WA_ACTIVE : Frame chứa view được kích hoạt.
136 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
 CDocument* GetDocument( ); Trả về con trỏ đối tượng CDocument
đang sử dụng view.
 virtual void OnUpdate (
CView*
pSender
, // Đối tượng view làm thay đổi dữ liệu
LPARAM
lHint
, // Tương tự UpdateAllViews()
CObject*
pHint
// của CDocument
); Hành vi được thực hiện khi nội dung dữ liệu trong document liên
quan đến view được cập nhật.
 BOOL DoPreparePrinting( CPrintInfo*
pInfo
); Mở hộp in ấn.


11.3 CFrameWnd:
CFrameWnd là lớp đối tượng quản lý khung cửa sổ giao diện chính của
ứng dụng (chương 10). Tham gia vào bộ ba DVF của ứng dụng sử dụng dữ
liệu, lớp đối tượng CFrameWnd có các hoạt động xử lý bổ sung như sau:
 Khi frame được kích hoạt, nó gọi hành vi OnActivateView của view.
 Nếu frame được khởi tạo với thông số dạng FWS_ADDTOTITLE thì
tiêu đề của dữ liệu (document) hiển thò trong view thuộc farme sẽ được
đưa lên tiêu đề của frame.
 Frame thực hiện điều phối command message cho view.

11.4 CDocTemplate:
CDocTemplate là lớp đối tượng quản lý bộ ba DVF của MFC. Bộ ba này
bao gồm CDocument – CView – CFrameWnd.
 CDocTemplate (
UINT nIDResource, // Số hiệu các resource liên quan:
CRuntimeClass* pDocClass, // menu, icon, phím tắt, stringTable
CRuntimeClass* pFrameClass,
CRuntimeClass* pViewClass
); Tạo lập và khởi tạo thông số cho đối tượng CDocTemplate.
-
pDocClass
: Con trỏ đối tượng CRuntimeClass quản lý thông tin của
lớp document tại thời điểm thực thi chương trình.
-
pFrameClass
: Con trỏ đối tượng CRuntimeClass quản lý thông tin
của lớp frame window tại thời điểm thực thi chương trình.
-
pViewClass
: Con trỏ đối tượng CRuntimeClass quản lý thông tin

của lớp view tại thời điểm thực thi chương trình.
Con trỏ chứa thông tin thi hành của một lớp nhận được từ macro sau:
CRuntimeClass* RUNTIME_CLASS ( Tên_Lớp )
Các kiến trúc Document & View 137
 virtual BOOL GetDocString (
CString& rString, // Biến chuỗi chứa kết quả
enum DocStringIndex index // Chỉ số mục thông tin cần lấy.
);
Chỉ số mục thông tin cần lấy có thể là:
- CDocTemplate::
windowTitle
: Tiêu đề
- CDocTemplate::
docName
: Tên document.
- CDocTemplate::
fileNewName
: Tên mặc nhiên dùng cho tập tin
dữ liệu được tạo mới.
) Cả CDocument và CView trong bộ DVF đều có thể đọc, ghi dữ liệu trên
đối tượng lưu trữ dữ liệu thông qua hành vi kế thừa được: Serialize.
virtual void Serialize( CArchive& ar );
throw( CMemoryException ); // Dùng khi ar liên quan bộ nhớ trong.
throw( CArchiveException ); // Dùng khi ar là Archive trên đóa.
throw( CFileException ); // Dùng khi ar là File.

11.5 HỖ TR TỪ PHÍA ĐỐI TƯNG QUẢN LÝ ỨNG DỤNG:
Lớp CWinApp có các hành vi liên quan việc khởi tạo ứng dụng sử dụng dữ
liệu và thao tác dữ liệu dựa trên bộ khung DVF như sau:
 void AddDocTemplate (

CDocTemplate*
pTemplate
// Con trỏ đối tượng quản lý bộ DVF
); Đưa một bộ ba DVF vào danh sách dữ liệu quản lý bởi ứng dụng.
 BOOL ProcessShellCommand ( CCommandLineInfo&
rCmdInfo
);
Thực hiện tác vụ xử lý dữ liệu theo yêu cầu của system shell. Ứng
dụng chỉ cho phép xử lý dữ liệu (tập tin) phù hợp với chức năng của
các bộ DVF trong danh sách dữ liệu quản lý bởi ứng dụng.
rCmdInfo
: Chứa các thông số dòng lệnh (nếu có) bao gồm tên dữ
liệu, lệnh thao tác (edit, open, ...) trên dữ liệu do shell chuyển đến.
 void ParseCommandLine ( CCommandLineInfo&
rCmdInfo
);
Chuẩn bò thông số cần thiết trong
rCmdInfo
để chuyển cho hành vi
ProcessShellCommand. Các thông số này tương ứng với nội dung tham
số dòng lệnh của ứng dụng.
 afx_msg void OnFileNew(); Hành vi trả lời cho WM_COMMAND
được phát ra bởi mục menu có số hiệu ID_FILE_NEW.
 afx_msg void OnFileOpen(); Hành vi trả lời cho WM_COMMAND
được phát ra bởi mục menu có số hiệu ID_FILE_OPEN.
138 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
 afx_msg void OnFilePrintSetup(); Hành vi xử lý WM_COMMAND
được phát ra bởi mục menu có số hiệu ID_FILE_PRINT_SETUP.

11.6 TRÌNH TỰ TẠO LẬP CÁC ĐỐI TƯNG THAM GIA BỘ DVF:

 Đối tượng document
:

 Đối tượng Frame window
:

Các kiến trúc Document & View 139
 Đối tượng view:


) Nhằm hỗ trợ người dùng thực hiện các dự án liên quan đến việc sử dụng
dữ liệu, MFC cung cấp các bộ DVF phổ biến và cài đặt các bộ này trong
phần hỗ trợ MFC Wizard. Sau đây là một số bộ DVF đặc trưng của MFC.

11.7 TEXT DOCUMENT APPICATION:
 Chọn File / New:



 Ấn đònh như trên. Chọn
OK
.
140 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -


 Ấn đònh như trên. Chọn
Next
.

 Chọn

None
(không sử dụng cơ sở dữ liệu). Chọn
Next
.
Các kiến trúc Document & View 141


 Chọn
None
(dữ liệu chỉ chứa văn bản). Chọn
Next
.


 Ấn đònh các mục cần cần thiết:
142 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh -
-
Printing and print preview
: Cho phép chức năng in ấn.
-
MAPI
: Sử dụng dòch vụ mail cho dữ liệu của ứng dụng.
Chọn
Next
.


 Chọn
MFC Standard
: Ứng dụng có giao diện bình thường hoặc

Windows Explorer
: Ứng dụng có giao diện như
windows explorer
.
Chọn cơ chế liên kết với thư viện MFC. Chọn
Next
.

Các kiến trúc Document & View 143
 Ấn đònh tên các tập tin chứa khai báo và cài đặt của các lớp.
Lưu ý
: Chọn lớp CTxtDVFView, khai báo lớp cơ sở là CEditView để
màn hình view cho phép soạn thảo. Sau cùng chọn
Finish
.
Ứng dụng nhận được có thể soạn thảo và quản lý dữ liệu văn bản.

) Kế thừa hành vi Serialize( CArchive
ar
) của lớp view, dựa trên giá trò trả
về từ hành vi IsStoring() của đối tượng tham số
ar
, chúng ta có thể tự xử lý
đọc/ghi dữ liệu theo cấu trúc lưu trữ riêng.

11.8 RICH TEXT FORMAT (RTF) DOCUMENT APPICATION:
 Chọn File / New:
 Trong hộp hội thoại New:
-
Project type

=
MFC AppWizard
.
-
ProjectName
=
rtfDVF
( tên dự án ).
-
Location
= Thư mục chứa dự án.
Sau đó chọn
OK
.



 Ấn đònh như trên. Chọn
Next
.

×