List Control (列表控件)

 

List Control (列表控件)

MFC中使用CListCtrl类来封装列表控件的各种操作

列表控件可以看作是功能增强的ListBox,提供了四种风格,LVS_ICON(大图标) LVS_SMALLICON(小图标) LVS_LIST(列表) LVS_REPORT(报表)。(在控件属性中的View中进行设置)。

为列表控件添加一个控制变量(m_list),通过其对相应函数进行调用。

报表风格 LVS_REPORT
SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //加网格

//List title (报表风格就必须先设置列表控件中的列信息)
int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);
      iCol为列的位置(列号),从零开始
      lpszColumnHeading为显示的列名
      nFormat为显示对齐方式
       nWidth为显示宽度
       nSubItem为分配给该列的列索引

int SetColumnWidth(int nCol,int nWidth); //设置列宽

CRect rect;
m_list.GetClientRect(rect);                                //获得当前客户区信息
m_list.SetColumnWidth(0,rect4.Width()/4);      

m_list.SetColumnWidth(1,rect4.Width()/4);
m_list.SetColumnWidth(2,rect4.Width()/4);
m_list.SetColumnWidth(3,rect4.Width()/4);


//List content


插入显示数据
int InsertItem( int nItem, LPCTSTR lpszItem );
//可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符
BOOL SetItemText(int nItem, int nSubItem, LPTSTR lpszText ); //可以设置每列的显示字符。nItem为设置的项的位置(行号),nSubItem为列位置(列号),lpszText为显示字符。

获取显示数据
CString GetItemText( int nItem, int nSubItem ); //用于得到某项的显示字符

删除显示数据
BOOL DeleteItem(int nItem);   //用于删除某一项
BOOL DeleteAllItems( );        
//将删除所有项

相关操作
void SetItemCount( int iCount );      //用于得到添加进列表中项的数量

//界面
得到/修改控件的状态
COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr ); //用于得到/设置显示的字符颜色
COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr ); //用于得到/设置显示的背景颜色
BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent); //用于置背景位



示例:
1.添加ListControl 控件,属性中的Appearance属性页下的View选择Report。
并设置其对应的控制变量如:m_list。

2.初始化,即设置list title
   m_list.InsertColumn(0,_T("From"),LVCFMT_LEFT);
   m_list.InsertColumn(1,_T("To"),LVCFMT_LEFT);
   m_list.InsertColumn(2,_T("Sbuject"),LVCFMT_LEFT);
   m_list.InsertColumn(3,_T("Date"),LVCFMT_LEFT);
CRect rect;
m_list.GetClientRect(rect);                     
m_list.SetColumnWidth(0,rect4.Width()/4);
m_list.SetColumnWidth(1,rect4.Width()/4);
m_list.SetColumnWidth(2,rect4.Width()/4);
m_list.SetColumnWidth(3,rect4.Width()/4);

这部分初始化操作,最好放在对话框类的OnInitDialog()函数里,自动初始化。

3.插入数据

//插入第一个数据,即第0条数据。先插入,然后在修改其他的信息。
m_list.InsertItem(0,"<jane@126.com>");    
//修改第0条数据的其他信息。
m_list1.SetItemText(0,1,"<nina@126.com> ");    
m_list1.SetItemText(0,2,"ok");
m_list1.SetItemText(0,3,"2009-01-01");
4.删除所有数据
   m_list.DeleteAllItems();

补充:
<1>列可与一个结构体关联
//添加一个项目
int nItem = m_list.InsertItem(m_list.GetItemCount(), _T("content"));
//创建自定义结构(不能使用局部变量)
ITEMDATA *pData = new ITEMDATA;
//设置项目数据
m_list.SetItemData(nItem, (DWORD)pData);
//获取项目数据
ITEMDATA *pData = (ITEMDATA *)m_list.GetItemData(nItem);
//删除MyListCtrl中的项目前
delete (ITEMDATA *)m_list.GetItemData(nItem);

<2>带有CheckBox的CListCtrl中Check状态的获取
a. 建立测试工程

     新建一个对话框工程,并添加一个CListCtrl控件,并关联一个成员变量m_List。

b. 设置LVS_EX_CHECKBOXES风格
     ListView_SetExtendedListViewStyle(m_List.GetSafeHwnd(), m_List.GetExStyle() | LVS_EX_CHECKBOXES);

c.为listctrl添加测试项
     在OnInitDialog()中添加如下代码:
      m_List.InsertColumn(0,"Name",LVCFMT_LEFT,150);
      m_List.InsertColumn(1,"Sex",LVCFMT_LEFT,200);
      m_List.InsertItem(0, "jane");
      m_List.InsertItem(1, "nina");

d.添加控件通知消息
     为ListCtrl控件添加LVN_ITEMCHANGED消息。系统生成如下代码:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}

e.在LVN_ITEMCHANGED消息处理函数中添加代码如下:
void CXXXDlg::OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */
   && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */
   )
{
   TRACE("Item %d is checked\n", pNMLV->iItem);
}
else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */
   && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */
   )
{
   TRACE("Item %d is unchecked\n", pNMLV->iItem);
}
else
{
   TRACE("Item %d does't change the check-status\n", pNMLV->iItem);
}

*pResult = 0;
}

f.调试
在debug环境下,改变checkbox的选中状态,查看输出信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值