Các KIẾN TRÚC Document & View
11.10 MỘT SỐ LỚP VIEW ĐẶC BIỆT: 1 CListView:
11.10.1 CListView:
CListView là 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ả về đối tượng CListCtrl làm cơ sở cho các tác vụ liên quan ListView.
2 Các hành vi đặc trưng của CListCtrl:
BOOL SetBkColor( COLOREF cr ); Đặt màu nền cho listview. COLORREF GetBkColor(); Trả về giá trị màu nền của listview.
150 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com
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 các mục của listview. Cách sử dụng có thể là:
LVSIL_NORMAL : Ảnh bình thường. LVSIL_SMALL : Ảnh nhỏ. int InsertItem (
int nItem, // Chỉ số mục được thêm LPCTSTR lpszItem, // Nội dung thông báo của mục
int nImage // Chỉ số ảnh trong Imagelist mà mục sử dụng ); Thêm một mục vào listview.
BOOL DeleteItem (
int nItem // Số hiệu của mục ); Xóa một mục trong listview.
BOOL DeleteAllItems( ); Xóa rỗng listview. BOOL GetItem (
LVITEM* pItem // Con trỏ đến cấu trúc nhận thông tin ); 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ó chỉ số là 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 nếu phần tử này không được nhìn thấy trong vùng hiển thị cho phép của view.
11.10.2 CTreeView:
CTreeView là lớp đối tượng quản lý màn hình view có cấu trúc cây. CTreeView( ); Tạo lập đối tượng treeview.
CTreeCtrl& GetTreeCtrl( ); Trả về đối tượng CTreeCtrl làm cơ sở cho các tác vụ liên quan TreeView.
2 Các hành vi đặc trưng của CTreeCtrl:
BOOL SetBkColor( COLOREF cr ); Đặt màu nền cho treeview. COLORREF GetBkColor( ); Trả về giá trị màu nền của treeview. CImageList* SetImageList (
Các kiến trúc Document & View 151
CImageList* pImagelist, // Con trỏ đố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 các mục của treeview. Cách sử dụng có thể là:
TVSIL_NORMAL : Ảnh dùng cho các mục bình thường.
TVSIL_STATE : Ảnh dùng cho các mục đặc trưng do người dùng định nghĩa.
UINT GetCount( ); Trả về số mục của treeview.
HTREEITEM GetRootItem( ); Trả về handle của phần tử đầu gốc. HTREEITEM GetFirstVisibleItem( ); Trả về handle của phần tử hiển
thị đầu tiên trong vùng nhìn thấy của treeview (NULL: Không có). HTREEITEM GetSelectedItem(); Trả về handle của phần tử đang được
chọn.
HTREEITEM GetNextVisibleItem( HTREEITEM hItem ); Trả về handle của phần tử hiển thị kế sau phần tử có handle là hItem.
HTREEITEM GetPrevVisibleItem( HTREEITEM hItem ); Trả về handle của phần tử hiển thị kế trước phần tử có handle là hItem.
HTREEITEM InsertItem (
LPCTSTR lpszItem, // Nội dung thông báo của mục
int nImage, // Chỉ số ảnh dùng cho mục ở trạng thái int nImageSelected, // bình thường và khi mục được chọn. HTREEITEM parent = TVI_ROOT, // Con trỏ mục cha HTREEITEM hInsertAfter = TVI_LAST // Con trỏ mục đứng trước ); Thêm một mục vào treeview, trả về handle của phần tử mới thêm. BOOL DeleteItem (
HTREEITEM hItem /* handle của mục*/ ); Xóa mục của 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 của 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 của phần tử
152 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com
int nSelectedImage // bình thường và khi mục được chọn. ); Ấn định chỉ số ảnh trong imagelist dùng cho mục.
BOOL SetItemText (
HTREEITEM hItem, // handle của mục LPCTSTR lpszItem // Nội dung thông báo
); Ấn định lại nội dung thông báo của mục trong treeview. 11.10.3 CSplitterWnd:
Vùng client trong frame window cho phép cài đặt một cửa sổ view duy nhất. Để lồng được nhiều view vào frame ta phải phân chia vùng client của frame. Việc phân chia này được hỗ trợ bởi công cụ splitter window.
Mỗi splitter window cho phép tách vùng client của frame window thành nhiều hàng và cột. Sau đó, mỗi ô (pane) nhận được từ splitter này có thể lại được tách ra thành nhiều hàng và cột bởi một splitter khác. Trong ví dụ trên:
- Splitter thứ nhất tách frame window thành hai dòng và 1 cột.
- Splitter thứ hai tách pane thứ nhất của splitter thứ nhất thành 2 cột và 1 dòng.
Mỗi pane nhận được từ các splitter window cho phép gắn một màn hình view. Như vậy, thông qua các splitter window, frame window có thể chứa nhiều màn 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ý các spliiter window trong ứng dụng. Các hành vi đặc trưng của lớp CSplitterWnd như sau:
CSplitterWnd( ); Tạo lập đối tượng splitter window.
Các kiến trúc Document & View 153
BOOL Create (
CWnd* pParentWnd, // Con trỏ đối tượng cửa sổ cha int nMaxRows, // Số hàng tối đa của các pane int nMaxCols, // Số cột tối đa của các pane
SIZE sizeMin, // Kích thước tối thiểu của mỗi 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 được. BOOL CreateStatic (
CWnd* pParentWnd, // Con trỏ đối tượng cửa sổ cha int nRows, // Số hàng các pane được tạo int nCols, // Số cột các pane được tạo DWORD dwStyle = WS_CHILD | WS_VISIBLE, // Dạng và UINT nID = AFX_IDW_PANE_FIRST // Số hiệu ); Tạo spliiter window với số hàng và cột cố định.
virtual BOOL CreateView (
int row, // Chỉ số hàng và
int col, // chỉ số cột của pane trong splitter CRuntimeClass* pViewClass, // Cấu trúc chứa thông tin lớp view SIZE sizeInit // Kích thước khởi đầu của pane ); Cài view vào một pane xác định trong splitter window.
pViewClass : Con trỏ đối tượng CRuntimeClass quản lý thông tin của lớp view tương ứng tại thời điểm thực thi chương trình. Xem (11.4). void SetColumnInfo (
int col, // Chỉ số cột trong splitter int cxIdeal, // Độ rộng mong muốn và
int cxMin // độ rộng tối thiểu (tính bằng pixel) ); Ấn định thông số về độ rộng cho cột trong splitter window.
void GetColumnInfo (
int col, // Chỉ số cột
int& cxCur, // Tham biến chứa độ rộng hiện thời int& cxMin // Tham biến chứa độ rộng tối thiểu ); Lấy thông tin về độ rộng của cột.
154 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.com
int row, // Chỉ số hàng
int cyIdeal, // Độ cao mong muốn int cyMin // Độ cao tối thiểu
); Ấn định thông số về độ cao cho hàng trong splitter window. void GetRowInfo (
int row, // Chỉ số hàng
int& cyCur, // Tham biến chứa độ cao hiện thời int& cyMin // Tham biến chứa độ cao tối thiểu ); Lấy thông tin về độ cao của hàng.
void RecalcLayout( ); Cập nhật thông số ấn định mới của splitter. CWnd* GetPane (
int row, int col // Chỉ số hàng và cột của pane ); Trả về con trỏ đối tượng view cài trong pane.