Hướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về List Control

ListControl được bao bọc bởi lớp CListCtrl trong MFC. ListControl thểhiện

nội dung của nó dưới 4 dạng :

Dạng Icon : gồm có các icon có kích cỡ32x32 và có một nhãn dưới từng icon.

Dạng Small Icon : gồm có các icon 16x16 và nhãn bên phải icon.

Dạng Listview : gồm có các icon 16x16 và nhãn bên phải icon. Các mục trong

ListControl được sắp xếp theo cột.

pdf7 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 1809 | Lượt tải: 4download
Tóm tắt nội dung Hướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về List Control, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Hướng dẫn thực hành Lập trình C trên Windows 
 1 
GIỚI THIỆU VỀ LIST CONTROL 
GIỚI THIỆU 
ListControl được bao bọc bởi lớp CListCtrl trong MFC. ListControl thể hiện 
nội dung của nó dưới 4 dạng : 
Dạng Icon : gồm có các icon có kích cỡ 32x32 và có một nhãn dưới từng icon. 
Dạng Small Icon : gồm có các icon 16x16 và nhãn bên phải icon. 
Dạng Listview : gồm có các icon 16x16 và nhãn bên phải icon. Các mục trong 
ListControl được sắp xếp theo cột. 
Dạng ReportView : gồm các cột và phần tiêu đề trên mỗi cột. 
HÌNH TRONG LISTCONTROL 
Để đưa hình vào trong ListControl phải tạo ra các ImageList để chứa hình. 
CImageList dùng để chứa các hình ảnh để gắn vào trong một Listcontrol. 
Trong lớp CImageList có các hàm cần được quan tâm sau đây : 
Create 
Hàm này dùng để thiết lập những thông tin ban đầu cho ImageList như : kích cỡ 
của hình ảnh (chiều rộng, chiều cao), số màu của hình ảnh, kích cỡ ban đầu, và trong 
tương lai của ImageList. 
BOOL Create( 
 int cx, 
 int cy, 
 UINT nFlags, 
 int nInitial, 
 int nGrow 
); 
Add 
Thêm một hình ảnh vào trong ImageList. 
Hướng dẫn thực hành Lập trình C trên Windows 
 2 
int Add( 
 CBitmap* pbmImage, 
 CBitmap* pbmMask 
); 
int Add( 
 CBitmap* pbmImage, 
 COLORREF crMask 
); 
int Add( 
 HICON hIcon 
); 
Một số hàm khác cần được quan tâm khác trong lớp CImageList : 
GetImageCount, GetImageInfo, Copy, Read, Remove, Replace, Write. 
TẠO SỐ NGẪU NHIÊN 
Trên môi trường DOS, để tạo số ngẫu nhiên chúng ta đơn giản sử dụng các hàm 
randomize, rand, và random. Tuy nhiên, những hàm này không sử dụng được trên 
môi trường Windows. Để thực hiện việc tạo ngẫu nhiên chúng ta phải sử dụng các 
hàm dưới đây : 
srand 
Phải khởi tạo bộ tạo ngẫu nhiên trước khi thực hiện lấy một số ngẫu nhiên bằng 
hàm srand(). 
srand( (unsigned)time(NULL)); 
rand() 
Hàm rand() dùng để lấy một số ngẫu nhiên tạo được. Giá trị trả về là một số 
nguyên 32 bit. 
Hướng dẫn thực hành Lập trình C trên Windows 
 3 
CÀI ĐẶT THỬ NGHIỆM 
Tạo ra Project có tên là TrucXanh. 
Tạo biến 
Tạo Member Variable cho ListControl 
Thêm vào trong lớp CTrucXanhDlg một biến kiểu CimageList có tên là 
m_ilChua. 
Hướng dẫn thực hành Lập trình C trên Windows 
 4 
Thêm hình vào trong ImageList 
Đoạn code dưới đây sẽ đưa vào trong ImageList có tên là m_ilChua 16 hình 
ảnh bitmap có kích cỡ 32x32 và ở dạng 16 màu (ILC_COLOR4). 
 m_ilChua.Create(32,32,ILC_COLOR4, 16,20); //Tạo imagelist 
 int i; 
 CBitmap bm; 
 //Thêm vào trong ImageList 
 for (i = 0; i <16 ; i++) 
 { 
 bm.LoadBitmap(IDB_BITMAP1 + i); 
 m_ilChua.Add(&bm, RGB(0,0,255)); 
 bm.Detach(); 
 } 
Trong đoạn code trên đây có một điểm cần lưu ý : 
bm.LoadBitmap(IDB_BITMAP1 + i);// i = 0..15 
Đoạn code trên chỉ thực hiện đúng khi các hình ảnh phải có giá trị ID liên tục. 
(Muốn được các ID liên tục, chúng ta phải Insert hoặc Import nó vào trong Project 
cùng một lúc hoặc sẽ vào trong tập tin Resource.h chỉnh sửa các giá trị ID của nó lại 
sao cho chúng được liên tục). 
Hướng dẫn thực hành Lập trình C trên Windows 
 5 
Gắn ImageList vào trong ListControl 
Sử dụng hàm SetImageList để gắn một ImageList đã có sẵn vào một 
ListControl. 
m_ListCtrl.SetImageList(&m_ilChua,LVSIL_NORMAL); 
Thêm các mục trong ListControl có hình 
Sử dụng hàm InsertItem để chèn một mục vào trong ListControl. 
 CString str; 
 for (i = 0; i <10; i++) 
 { 
 str.Format("Muc %d", i+1); 
 m_ListCtrl.InsertItem(i,str,i+1); 
 } 
Đoạn code trên đây minh hoạ việc chèn vào trong ListControl 10 mục. Mỗi 
mục sẽ có nhãn là “Muc” + [STT]. Mỗi mục sẽ có một hình tương ứng theo số thứ tự 
trong ImageList. 
Thực hiện chương trình 
Thêm các đoạn code sau vào trong hàm OnInitDialog của lớp CTrucXanhDlg 
// TODO: Add extra initialization here 
 m_ilChua.Create(32,32,ILC_COLOR4, 16,20); 
 int i; 
 CBitmap bm; 
 for (i = 0; i <16 ; i++) 
 { 
 bm.LoadBitmap(IDB_BITMAP1 + i); 
 m_ilChua.Add(&bm, RGB(0,0,255)); 
 bm.Detach(); 
 } 
 m_ListCtrl.SetImageList(&m_ilChua,LVSIL_NORMAL); 
 CString str; 
 for (i = 0; i <10; i++) 
 { 
 str.Format("Muc %d", i+1); 
 m_ListCtrl.InsertItem(i,str,i+1); 
 } 
chúng ta sẽ được chương trình có hình ảnh dưới đây : 
Hướng dẫn thực hành Lập trình C trên Windows 
 6 
Nhấn kép vào trong một item 
Dùng ClassWizard để thêm một hàm xử lý sự kiện NM_DBLCLK cho 
ListControl. 
Đoạn code sau đây minh hoạ việc thay đổi hình ảnh và nội dung của một mục 
được chọn (nSelected). 
Hướng dẫn thực hành Lập trình C trên Windows 
 7 
 POSITION p = m_ListCtrl.GetFirstSelectedItemPosition(); 
 int nSelected = m_ListCtrl.GetNextSelectedItem(p); 
 m_ListCtrl.DeleteItem(nSelected); // Xoá 
 m_ListCtrl.InsertItem(nSelected,"Hello",15);//Thêm vào 
Tháng 08/2004 
Văn Chí Nam – Nguyễn Đức Hoàng Hạ 
vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn 

File đính kèm:

  • pdfHướng dẫn thực hành Lập trình C trên Windows - Giới thiệu về List Control.pdf