Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
244,88 KB
Nội dung
CHƯƠNG 11: Các KIẾN TRÚC Document & View MFC hỗ trợ mạnh mẽ dự án sử dụng liệu, bao gồm liệu dạng văn (text), dạng văn kèm hình ảnh định dạng (lưu dạng văn – rich text format lưu dạng mã nhị phân – compound file), dạng lưu trữ hệ quản trị sở liệu truy xuất thông qua ODBC, ADO Ứng dụng sử dụng liệu dễ dàng phát triển VC nhờ MFC cung cấp khung chuẩn cho dự án thao tác liệu Bộ khung bao gồm ba thành phần: Document-View-Frame (DVF) Trong đó: Document: Quản lý toàn nội dung liệu ứng dụng lưu trữ nhớ View: Thực chức hiển thị quản lý phần liệu document Frame Window: Chứa view, điều phối command message từ người dùng đến view cách thích hợp Bộ khung thực thông qua lớp liên quan sau virtual BOOL OnNewDocument( ); Hành vi thực đối tượng CDocument tạo mới; kế thừa để cài đặt khởi tạo riêng virtual BOOL OnOpenDocument ( // Đường dẫn tên tập tin LPCTSTR lpszPathFileName ); Hành vi thực đố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 việc đọc tập tin virtual BOOL OnSaveDocument ( LPCTSTR lpszPathName // Đường dẫn tên tập tin ); Hành vi thực nội dung document lưu vào tập tin Việc kế thừa hành vi nhằm thực xử lý lưu trữ theo cách riêng ứng dụng BOOL IsModified( ); Trả tình trạng cập nhật liệu document ; =TRUE (có chỉnh sửa) =FALSE (không có chỉnh sửa) 11.1 CDocument: CDocument lớp đối tïng quản lý nội dung liệu (Document) CDocument( ); Tạo lập đối tượng rỗng void AddView ( // Con trỏ đối tượng view CView* pView ); Bổ sung view vào danh sách view document void RemoveView ( CView* pView // Con trỏ đối tượng view ); Loại bỏ view khỏi danh sách view document void UpdateAllViews ( CView* pSender, // Đối tượng view miễn cập nhật // Số hiệu cập nhật LPARAM lHint = 0L, CObject* pHint = NULL // Cấu trúc chứa thông tin cập nhật ); Thông báo view danh sách view document cập nhật lại nội dung hiển thị const CString& GetTitle( ); Trả nội dung tiêu đề liệu virtual void DeleteContents( ); Xóa rỗng nội dung document 11.2 CView: CView, lớp kế thừa từ lớp CWnd, giúp quản lý thành phần view ứng dụng Trong ba DVF, view thành phần giao diện quan trọng cho phép người dùng thao tác liệu ứng dụng cách dễ dàng hiệu CView( ); Tạo lập đối tượng view virtual void OnInitialUpdate( ); Hành vi thực đối tượng view kết vào danh sách đối tượng view document Việc kế thừa nhằm cài đặt ấn định khởi tạo thông số cho view virtual void OnActivateView ( BOOL bActivate, // =TRUE: kích hoạt ; ngược lại CView* pActivateView, // Đối tượng view kích hoạt CView* pDeactiveView // Đối tượng view bị ngừng hoạt động ); Hành vi thực đối tượng view kích hoạt kích hoạt virtual void OnActivateFrame ( // Trạng thái kích hoạt UINT nState, CFrameWnd* pFrameWnd // Con trỏ đối tượng frame chứa view ); Hành vi thực đối tượng frame chứa view kích hoạt Trạng thái kích hoạt frame chứa view là: WA_INACTIVE : Frame chứa view ngừng hoạt động WA_ACTIVE : Frame chứa view kích hoạt 134 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 135 CDocument* GetDocument( ); Trả trỏ đối tượng CDocument sử dụng view virtual void OnUpdate ( // Đối tượng view làm thay đổi liệu CView* pSender, LPARAM lHint, // Tương tự UpdateAllViews() // CDocument CObject* pHint ); Hành vi thực nội dung liệu document liên quan đến view cập nhật BOOL DoPreparePrinting( CPrintInfo* pInfo ); Mở hộp in ấn 11.3 CFrameWnd: CFrameWnd lớp đối tượng quản lý khung cửa sổ giao diện ứng dụng (chương 10) Tham gia vào ba DVF ứng dụng sử dụng liệu, lớp đối tượng CFrameWnd có hoạt động xử lý bổ sung sau: Khi frame kích hoạt, gọi hành vi OnActivateView view Nếu frame khởi tạo với thông số dạng FWS_ADDTOTITLE tiêu đề liệu (document) hiển thị view thuộc farme đưa lên tiêu đề frame Frame thực điều phối command message cho view 11.4 CDocTemplate: CDocTemplate lớp đối tượng quản lý ba DVF MFC Bộ ba bao gồm CDocument – CView – CFrameWnd CDocTemplate ( UINT nIDResource, // Số hiệu resource liên quan: CRuntimeClass* pDocClass, // menu, icon, phím tắt, stringTable CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass ); Tạo lập 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 lớp document thời điểm thực thi chương trình - pFrameClass: Con trỏ đối tượng CRuntimeClass quản lý thông tin lớp frame window thời điểm thực thi chương trình - pViewClass: Con trỏ đối tượng CRuntimeClass quản lý thông tin lớp view thời điểm thực thi chương trình Con trỏ chứa thông tin thi hành lớp nhận từ macro sau: CRuntimeClass* RUNTIME_CLASS ( Tên_Lớp ) 136 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com virtual BOOL GetDocString ( CString& rString, // Biến chuỗi chứa kết 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 là: Tiêu đề - CDocTemplate::windowTitle : - CDocTemplate::docName : Tên document - CDocTemplate::fileNewName : Tên dùng cho tập tin liệu tạo Cả CDocument CView DVF đọc, ghi liệu đối tượng lưu trữ liệu thông qua hành vi kế thừa được: Serialize virtual void Serialize( CArchive& ar ); throw( CMemoryException ); // Dùng ar liên quan nhớ throw( CArchiveException ); // Dùng ar Archive đóa throw( CFileException ); // Dùng ar File 11.5 HỖ TR TỪ PHÍA ĐỐI TƯNG QUẢN LÝ ỨNG DỤNG: Lớp CWinApp có hành vi liên quan việc khởi tạo ứng dụng sử dụng liệu thao tác liệu dựa khung DVF sau: void AddDocTemplate ( CDocTemplate* pTemplate // Con trỏ đối tượng quản lý DVF ); Đưa ba DVF vào danh sách liệu quản lý ứng dụng BOOL ProcessShellCommand ( CCommandLineInfo& rCmdInfo ); Thực tác vụ xử lý liệu theo yêu cầu system shell Ứng dụng cho phép xử lý liệu (tập tin) phù hợp với chức DVF danh sách liệu quản lý ứng dụng rCmdInfo : Chứa thông số dòng lệnh (nếu có) bao gồm tên liệu, lệnh thao tác (edit, open, ) liệu shell chuyển đến void ParseCommandLine ( CCommandLineInfo& rCmdInfo ); Chuẩn bị thông số cần thiết rCmdInfo để chuyển cho hành vi ProcessShellCommand Các thông số tương ứng với nội dung tham số dòng lệnh ứng dụng afx_msg void OnFileNew(); Hành vi trả lời cho WM_COMMAND phát mục menu có số hiệu ID_FILE_NEW afx_msg void OnFileOpen(); Hành vi trả lời cho WM_COMMAND phát mục menu có số hiệu ID_FILE_OPEN Các kiến trúc Document & View 137 afx_msg void OnFilePrintSetup(); Hành vi xử lý WM_COMMAND phát mục menu có số hiệu ID_FILE_PRINT_SETUP Đối tượng view: 11.6 TRÌNH TỰ TẠO LẬP CÁC ĐỐI TƯNG THAM GIA BỘ DVF: Đối tượng document: Nhằm hỗ trợ người dùng thực dự án liên quan đến việc sử dụng liệu, MFC cung cấp DVF phổ biến cài đặt phần hỗ trợ MFC Wizard Sau số DVF đặc trưng MFC 11.7 TEXT DOCUMENT APPICATION: Chọn File / New: Đối tượng Frame window: Ấn định Chọn OK 138 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 139 Ấn định Chọn Next Chọn None (dữ liệu chứa văn bản) Chọn Next Chọn None (không sử dụng sở liệu) Chọn Next Ấn định mục cần cần thiết: 140 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 141 - Printing and print preview: Cho phép chức in ấn - MAPI: Sử dụng dịch vụ mail cho liệu ứng dụng Chọn Next Ấn định tên tập tin chứa khai báo cài đặt lớp Lưu ý: Chọn lớp CTxtDVFView, khai báo lớp sở CEditView để hình view cho phép soạn thảo Sau chọn Finish Ứng dụng nhận soạn thảo quản lý liệu văn Kế thừa hành vi Serialize( CArchive ar ) lớp view, dựa giá trị trả từ hành vi IsStoring() đối tượng tham số ar, tự xử lý đọc/ghi liệu theo cấu trúc lưu trữ riêng 11.8 RICH TEXT FORMAT (RTF) DOCUMENT APPICATION: Choï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 Chọn MFC Standard: Ứng dụng có giao diện bình thường Windows Explorer: Ứng dụng có giao diện windows explorer Chọn chế liên kết với thư viện MFC Chọn Next Ấn định Chọn Next 142 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 143 Chọn None (không sử dụng sở liệu) Chọn Next Chọn mục cần thiết (11.7) Chọn Next Ứng dụng sử dụng OLE (Container) từ ứng dụng khác Chọn Next Chọn mục cần thiết (11.7) Chọn Next 144 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 145 Ấn định tên tập tin chứa khai báo cài đặt lớp Lưu ý: Chọn lớp CRtfDVFView, khai báo lớp sở CRichEditView để hình view cho phép soạn thảo liên kết với đối tượng OLE Sau chọn Finish Ứng dụng làm việc với liệu rtf 11.9 HTML DOCUMENT VIEW APPICATION: Chọn File / New Khởi đầu (11.8); ProjectName = HtmlDVF Ấn định Chọn Next 146 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Chọn None (không sử dụng sở liệu) Chọn Next Chọn None Chọn Next Các kiến trúc Document & View 147 Ấn định mục cần thiết; chọn chức in ấn Chọn Next Ấn định tên tập tin chứa khai báo cài đặt lớp Lưu ý: Chọn lớp CHtmlDVFView, khai báo lớp sở CHtmlView để hình view hiển thị nội dung trang HTML Chọn Finish Ấn định URL: Hành vi OnInitialUpdate lớp CHtmlDVFView thực ấn định URL (ví dụ: www.hcmueco.edu.vn) cho Navigate2 Ứng dụng nhận đảm nhận công việc Browser đơn giản Để cài đặt công cụ chương trình Internet Explorer cho ứng dụng, bước ‘Step of 6’ ta chọn mục: Internet Explorer Rebars 11.10 MỘT SỐ LỚP VIEW ĐẶC BIỆT: 11.10.1 CListView: CListView lớp đối tượng quản lý view dạng danh sách (list) CListView(); Tạo lập đối tượng view CListCtrl& GetListCtrl ( ); Trả đối tượng CListCtrl làm sở cho tác vụ liên quan ListView Chọn mục cần thiết (11.7) Chọn Next 148 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các hành vi đặc trưng CListCtrl: BOOL SetBkColor( COLOREF cr ); Đặt màu cho listview COLORREF GetBkColor(); Trả giá trị màu listview Các kiến trúc Document & View 149 CImageList* SetImageList ( CImageList* pImagelist, // Đối tượng imagelist int imgStyle // Thông số qui định cách sử dụng ); Chọn đối tượng imagelist chứa ảnh dùng cho mục listview Cách sử dụng là: LVSIL_NORMAL : Ảnh bình thường LVSIL_SMALL : Ảnh nhỏ int InsertItem ( int nItem, // Chỉ số mục thêm LPCTSTR lpszItem, // Nội dung thông báo mục int nImage // Chỉ số ảnh Imagelist mà mục sử dụng ); Thêm mục vào listview BOOL DeleteItem ( int nItem // Số hiệu mục ); Xóa mục listview BOOL DeleteAllItems( ); Xóa rỗng listview BOOL GetItem ( // Con trỏ đến cấu trúc nhận thông tin LVITEM* pItem ); Lấy thông tin liên quan đến mục có số thứ tự nItem BOOL SetItem ( LVITEM* pItem // Con trỏ đến cấu trúc chứa thông số ); Đặt thông số cho mục có số pItem ->iItem BOOL EnsureVisible ( int nItem, // Chỉ số phần tử cần nhìn thấy BOOL bPartialIsOK // =FALSE: Toàn bộ, =TRUE: Một phần ); Cuộn danh sách để nhìn thấy phần tử nItem phần tử không nhìn thấy vùng hiển thị cho phép view 11.10.2 CTreeView: CTreeView lớp đối tượng quản lý hình view có cấu trúc CTreeView( ); Tạo lập đối tượng treeview CTreeCtrl& GetTreeCtrl( ); Trả đối tượng CTreeCtrl làm sở cho tác vụ liên quan TreeView Các hành vi đặc trưng CTreeCtrl: BOOL SetBkColor( COLOREF cr ); Đặt màu cho treeview COLORREF GetBkColor( ); Trả giá trị màu treeview CImageList* SetImageList ( 150 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com CImageList* pImagelist, // Con trỏ đối tượng imagelist // Thông số qui định cách sử dụng int imgStyle ); Chọn đối tượng imagelist chứa ảnh dùng cho mục treeview Cách sử dụng là: TVSIL_NORMAL : Ảnh dùng cho mục bình thường TVSIL_STATE : Ảnh dùng cho mục đặc trưng người dùng định nghóa UINT GetCount( ); Trả số mục treeview HTREEITEM GetRootItem( ); Trả handle phần tử đầu gốc HTREEITEM GetFirstVisibleItem( ); Trả handle phần tử hiển thị vùng nhìn thấy treeview (NULL: Không có) HTREEITEM GetSelectedItem(); Trả handle phần tử chọn HTREEITEM GetNextVisibleItem( HTREEITEM hItem ); Trả handle phần tử hiển thị kế sau phần tử có handle hItem HTREEITEM GetPrevVisibleItem( HTREEITEM hItem ); Trả handle phần tử hiển thị kế trước phần tử có handle hItem HTREEITEM InsertItem ( // Nội dung thông báo mục LPCTSTR lpszItem, // Chỉ số ảnh dùng cho mục trạng thái int nImage, int nImageSelected, // bình thường mục chọn // Con trỏ mục cha HTREEITEM parent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST // Con trỏ mục đứng trước ); Thêm mục vào treeview, trả handle phần tử thêm BOOL DeleteItem ( HTREEITEM hItem /* handle mục*/ ); Xóa mục treeview BOOL DeleteAllItems( ); Xóa rỗng nội dung treeview BOOL GetItem ( TVITEM* pItem // Con trỏ đến cấu trúc nhận thông tin ); Lấy thông tin phần tử pItem->iItem BOOL SetItem ( TVITEM* pItem // Con trỏ đến cấu trúc chứa thông số ); Đặt thông số cho phần tử pItem->iItem BOOL SetItemImage ( HTREEITEM hItem, // handle phần tử int nImage, // Chỉ số ảnh dùng cho mục trạng thái Các kiến trúc Document & View 151 int nSelectedImage // bình thường mục chọn ); Ấn định số ảnh imagelist dùng cho mục BOOL SetItemText ( // handle mục HTREEITEM hItem, LPCTSTR lpszItem // Nội dung thông báo ); Ấn định lại nội dung thông báo mục treeview 11.10.3 CSplitterWnd: Vuøng client frame window cho phép cài đặt cửa sổ view Để lồng nhiều view vào frame ta phải phân chia vùng client frame Việc phân chia hỗ trợ công cụ splitter window Mỗi splitter window cho phép tách vùng client frame window thành nhiều hàng cột Sau đó, ô (pane) nhận từ splitter lại tách thành nhiều hàng cột splitter khác Trong ví dụ trên: - Splitter thứ tách frame window thành hai dòng cột - Splitter thứ hai tách pane thứ splitter thứ thành cột dòng Mỗi pane nhận từ splitter window cho phép gắn hình view Như vậy, thông qua splitter window, frame window chứa nhiều hình view đồng thời Nhằm tiện việc thao tác với công cụ splitter window, MFC cung cấp lớp đối tượng CSplitterWnd cho phép quản lý spliiter window ứng dụng Các hành vi đặc trưng lớp CSplitterWnd sau: CSplitterWnd( ); Tạo lập đối tượng splitter window 152 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com BOOL Create ( // Con trỏ đối tượng cửa sổ cha CWnd* pParentWnd, int nMaxRows, // Số hàng tối đa pane // Số cột tối đa pane int nMaxCols, SIZE sizeMin, // Kích thước tối thiểu pane CCreateContext* pContext, // Thông số liên kết, lấy từ frame DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT, UINT nID = AFX_IDW_PANE_FIRST ); Khởi tạo thông số spliiter window với số hàng, cột thay đổi BOOL CreateStatic ( CWnd* pParentWnd, // Con trỏ đối tượng cửa sổ cha int nRows, // Số hàng pane tạo // Số cột pane tạo int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, // Dạng UINT nID = AFX_IDW_PANE_FIRST // Số hiệu ); Tạo spliiter window với số hàng cột cố định virtual BOOL CreateView ( // Chỉ số hàng int row, // số cột pane splitter int col, CRuntimeClass* pViewClass, // Cấu trúc chứa thông tin lớp view // Kích thước khởi đầu pane SIZE sizeInit ); Cài view vào pane xác định splitter window pViewClass : Con trỏ đối tượng CRuntimeClass quản lý thông tin lớp view tương ứng thời điểm thực thi chương trình Xem (11.4) void SetColumnInfo ( int col, // Chỉ số cột splitter // Độ rộng mong muốn int cxIdeal, int cxMin // độ rộng tối thiểu (tính pixel) ); Ấn định thông số độ roäng cho coät splitter window void GetColumnInfo ( int col, // Chỉ số cột int& cxCur, // Tham biến chứa độ rộng thời // Tham biến chứa độ rộng tối thiểu int& cxMin ); Lấy thông tin độ rộng cột void SetRowInfo ( Các kiến trúc Document & View 153 int row, // Chỉ số hàng // Độ cao mong muốn int cyIdeal, int cyMin // Độ cao tối thiểu ); Ấn định thông số độ cao cho hàng splitter window void GetRowInfo ( int row, // Chỉ số hàng int& cyCur, // Tham biến chứa độ cao thời // Tham biến chứa độ cao tối thiểu int& cyMin ); Lấy thông tin độ cao hàng void RecalcLayout( ); Cập nhật thông số ấn định splitter CWnd* GetPane ( int row, int col // Chỉ số hàng cột pane ); Trả trỏ đối tượng view cài pane 11.10.4 SỬ DỤNG SPLITTERWND TRONG FRAME WINDOW: Khai báo đối tượng thuộc lớp SplitterWnd thuộc tính frame CSplitterWnd m_splitter; Dùng hành vi OnCreateClient frame để tạo pane cài view: Thực hành 1: Viết ứng dụng VD30 Tạo splitter CEmpFrame với hai view: bên trái treeview (dùng lớp view kế thừa từ CTreeView), bên phải list (dùng lớp view kế thừa từ ListView) Tạo dự án VD35 tương tự VD30 Đăng ký sử dụng CTreeView CListView: Trong tập tin stdafh.h dự án, bổ sung thị: #include Bổ sung vào dự án hai lớp mới: CEmpTree kế thừa từ CTreeView CEmpList kế thừa từ CListView Cách thực tương tự làm với CEmpWnd, mục (5.4.1) Khai báo đối tượng thuộc tính protected m_splitter kiểu CSplitterWnd Hành vi OnCreateClient CEmpFrame thực khởi tạo cài đặt pane, view cần thiết: BOOL CEmpFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext ) { if (!CFrameWnd::OnCreateClient(lpcs, pContext)) return FALSE; BOOL CEmpFrame::OnCreateClient ( LPCREATESTRUCT lpcs, CCreateContext* pContext ) { if (!CFrameWnd::OnCreateClient(lpcs, pContext)) return FALSE; // Dùng đối tượng splitter tách vùng client frame m_splitter.CreateStatic ( this , 1, ); // Ví dụ: hàng, cột // Gắn view tương ứng vào pane tạo được: m_splitter.CreateView ( 0, 0, RUNTIME_CLASS(viewClass1), CSize(120,0), NULL); m_splitter.CreateView(0,1, RUNTIME_CLASS(viewClass2), CSize(0,0), NULL); return TRUE; // Thực cài đặt khác } 11.10.5 CÁC VÍ DỤ THỰC HÀNH: 154 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com m_splitter.CreateStatic(this, 1, 2); m_splitter.CreateView( 0, 0, RUNTIME_CLASS(CEmpTree), CSize(120,0), NULL ); m_splitter.CreateView(0,1, RUNTIME_CLASS(CEmpList), CSize(0,0), NULL ); return TRUE; } Thực hành 2: Thực ứng dụng tương tự VD35 Tự động thực bổ sung ba phần tử treeview, phần tử có hai phần tử Các phần tử có hình minh họa cho trạng thái chọn không chọn Tạo dự án VD36 tương tự VD35 Bổ sung bitmap resource chứa hai ảnh kích thước: Đặt số hiệu cho bitmap resource IDB_IMGTREE Hành vi OnCreate CEmpTree đăng ký sử dụng ảnh bổ sung phần tử cần thiết: int CEmpTree::OnCreate(LPCREATESTRUCT lpCreateStruct) Các kiến trúc Document & View 155 { if (CTreeView::OnCreate(lpCreateStruct) == -1) return -1; static CImageList img; // use only in this function img.Create(IDB_IMGTREE, 16, 2, RGB(255,255,255)); CTreeCtrl& myCtrl = GetTreeCtrl(); // Based control myCtrl.SetImageList(&img, TVSIL_NORMAL); HTREEITEM hihi; // Add needed items hihi = myCtrl.InsertItem("Muc 1", 0, 1); myCtrl.InsertItem("Muc 11", 0, 1, hihi); myCtrl.InsertItem("Muc 12", 0, 1, hihi); hihi = myCtrl.InsertItem("Muc 2", 0, 1); myCtrl.InsertItem("Muc 21", 0, 1, hihi); myCtrl.InsertItem("Muc 22", 0, 1, hihi); hihi = myCtrl.InsertItem("Muc 3", 0, 1); myCtrl.InsertItem("Muc 31", 0, 1, hihi); myCtrl.InsertItem("Muc 321", 0, 1, myCtrl.InsertItem("Muc 32", 0, 1, hihi)); return 0; } Hành vi kế thừa PreCreateWindow ấn định thông số dạng treeview: BOOL CEmpTree::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= TVS_HASLINES|TVS_LINESATROOT| TVS_HASBUTTONS; return CTreeView::PreCreateWindow(cs); } Tạo ứng dụng soạn thảo văn (text) Ứng dụng cho phép người dùng đặt password bảo vệ liệu Chỉ mở liệu có password hợp lệ Tương tự tập cho ứng dụng RTF view Viết ứng dụng HTMLView: Thanh công cụ rebar (như IE Microsoft); Backward, Forward, hộp combobox nhập ghi nhớ URL nhập Phát triển VD36 thành ứng dụng cho phép xem cấu trúc ổ đóa, thư mục máy windows explorer HD: Xem hàm FindFirstFile() FindNextFile() Tạo sở liệu Access Dùng DVF (V = FormView) thích hợp để xem cập nhật liệu cho bảng sở liệu Viết ứng dụng RTF View Trong hình view, di chuyển chuột lên nội dung có chỉnh dạng gạch thực chuyển dạng chuột thành , ngược lại chỉnh dạng chuột dạng hệ thống Viết ứng dụng thi trắc nghiệm đơn giản: Màn hình view rtf cho phép hiển thị văn chỉnh dạng hình ảnh phản ánh nội dung câu hỏi đáp án lựa chọn Hiển thị dấu chọn người dùng đánh dấu đáp án Quan sát chương trình tra cứu từ điển Viết ứng dụng RTF view sử dụng sổ kiểu CEdit Khi thực double từ hình view rtf kích hoạt cửa sổ điền từ vừa chọn vào cửa sổ Khi người dùng click vào view, cửa sổ tự động biến Quan sát chương trình thi trắc nghiệm TOEFL Viết ứng dụng tập số 8, Khi thực double dòng hình view rtf kích hoạt cửa sổ điền nội dung dòng chọn vào cửa sổ này, Khi click vào cửa sổ view, nội dung chỉnh sửa cập nhật vào view 10 Quan sát Yahoo Messenger! Thực ứng dụng giao diện rtf sau: Một số thông số ấn định dạng treeview: TVS_HASLINES TVS_LINESATROOT TVS_HASBUTTONS TVS_SINGLEEXPAND TVS_xxx : Treeview có đường nối mục : Đường nối từ gốc : Có nút mở , đóng mục : Cho phép mở mục lúc : Xem MSDN THỰC HÀNH: 156 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 157 ...CDocument* GetDocument( ); Trả trỏ đối tượng CDocument sử dụng view virtual void OnUpdate ( // Đối tượng view làm thay đổi liệu CView* pSender, LPARAM lHint, // Tương tự UpdateAllViews() // CDocument... Thạnh - lntmail@yahoo.com Các kiến trúc Document & View 145 Ấn định tên tập tin chứa khai báo cài đặt lớp Lưu ý: Chọn lớp CRtfDVFView, khai báo lớp sở CRichEditView để hình view cho phép soạn thảo... ID_FILE_OPEN Các kiến trúc Document & View 137 afx_msg void OnFilePrintSetup(); Hành vi xử lý WM_COMMAND phát mục menu có số hiệu ID_FILE_PRINT_SETUP Đối tượng view: 11.6 TRÌNH TỰ TẠO LẬP CÁC ĐỐI