Hướng dn thc hành Lp trình C trên Windows
1
GII THIU V LIST CONTROL
GII THIU
ListControl được bao bc bi lp CListCtrl trong MFC. ListControl th hin
ni dung ca nó dưới 4 dng :
Dng Icon : gm có các icon có kích c 32x32 và có mt nhãn dưới tng icon.
Dng Small Icon : gm có các icon 16x16 và nhãn bên phi icon.
Dng Listview : gm có các icon 16x16 và nhãn bên phi icon. Các mc trong
ListControl được sp xếp theo ct.
Dng ReportView : gm các ct và phn tiêu đề trên mi ct.
HÌNH TRONG LISTCONTROL
Để đưa hình vào trong ListControl phi to ra các ImageList để cha hình.
CImageList dùng để cha các hình nh để gn vào trong mt Listcontrol.
Trong lp CImageList có các hàm cn được quan tâm sau đây :
Create
Hàm này dùng để thiết lp nhng thông tin ban đầu cho ImageList như : kích c
ca hình nh (chiu rng, chiu cao), s màu ca hình nh, kích c ban đầu, và trong
tương lai ca ImageList.
BOOL Create(
int cx,
int cy,
UINT nFlags,
int nInitial,
int nGrow
);
Add
Thêm mt hình nh vào trong ImageList.
Hướng dn thc hành Lp trình C trên Windows
2
int Add(
CBitmap* pbmImage,
CBitmap* pbmMask
);
int Add(
CBitmap* pbmImage,
COLORREF crMask
);
int Add(
HICON hIcon
);
Mt s hàm khác cn được quan tâm khác trong lp CImageList :
GetImageCount, GetImageInfo, Copy, Read, Remove, Replace, Write.
TO S NGU NHIÊN
Trên môi trường DOS, để to s ngu nhiên chúng ta đơn gin s dng các hàm
randomize, rand, và random. Tuy nhiên, nhng hàm này không s dng đưc trên
môi trường Windows. Để thc hin vic to ngu nhiên chúng ta phi s dng các
hàm dưới đây :
srand
Phi khi to b to ngu nhiên trước khi thc hin ly mt s ngu nhiên bng
hàm srand().
srand( (unsigned)time(NULL));
rand()
Hàm rand() dùng để ly mt s ngu nhiên to được. Giá tr tr v là mt s
nguyên 32 bit.
Hướng dn thc hành Lp trình C trên Windows
3
CÀI ĐẶT TH NGHIM
To ra Project có tên là TrucXanh.
To biến
To Member Variable cho ListControl
Thêm vào trong lp CTrucXanhDlg mt biến kiu CimageList có tên là
m_ilChua.
Hướng dn thc hành Lp trình C trên Windows
4
Thêm hình vào trong ImageList
Đon 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à dng 16 màu (ILC_COLOR4).
m_ilChua.Create(32,32,ILC_COLOR4, 16,20); //To 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 đon code trên đây có mt đim cn lưu ý :
bm.LoadBitmap(IDB_BITMAP1 + i);// i = 0..15
Đon code trên ch thc hin đúng khi các hình nh phi có giá tr ID liên tc.
(Mun được các ID liên tc, chúng ta phi Insert hoc Import nó vào trong Project
cùng mt lúc hoc s vào trong tp tin Resource.h chnh sa các giá tr ID ca nó li
sao cho chúng đưc liên tc).
Hướng dn thc hành Lp trình C trên Windows
5
Gn ImageList vào trong ListControl
S dng hàm SetImageList để gn mt ImageList đã có sn vào mt
ListControl.
m_ListCtrl.SetImageList(&m_ilChua,LVSIL_NORMAL);
Thêm các mc trong ListControl có hình
S dng hàm InsertItem để chèn mt mc 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);
}
Đon code trên đây minh ho vic chèn vào trong ListControl 10 mc. Mi
mc s có nhãn là “Muc” + [STT]. Mi mc s có mt hình tương ng theo s th t
trong ImageList.
Thc hin chương trình
Thêm các đon code sau vào trong hàm OnInitDialog ca lp 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 :