列表控件ListCtrl的使用

1.新建对话框工程Test,在对话框上放上ListCtrl控件IDC_LIST1,连接变量名m_list,增加代码:
BOOL CTestDlg::OnInitDialog()
{
//
        m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT  |  LVS_EX_GRIDLINES);
    m_list.SetBkColor(RGB(
240 , 255 , 240 ));
    m_list.SetTextColor(RGB(
0 , 0 , 255 ));
// ---------------------------------------------
       
// 插入列字段
    m_list.InsertColumn( 0 , " 学号 " ,LVCFMT_LEFT, 100 );
    m_list.InsertColumn(
1 , " 姓名 " ,LVCFMT_LEFT, 100 );
        
// 插入行项目
    m_list.InsertItem( 0 , " 20010540519 " );
    m_list.InsertItem(
1 , " 20010540520 " );
    m_list.InsertItem(
2 , " 20010540521 " );
        
// 插入行内容
    m_list.SetItemText( 0 , 1 , " 宫奇 " );
    m_list.SetItemText(
1 , 1 , " 杨建敏 " );
    m_list.SetItemText(
2 , 1 , " 张威 " );

    
return  TRUE;  
}
2.新建对话框IDD_EDIT, 用来做修改、删除、添加记录等,添加2个编辑框,分别连接变量m_StudentID和m_StudentName,为它创建新的类CEditDlg,基类是CDialog;
3.为了使用上面的CEditDlg类  ,在TestDlg.cpp里的 #endif 之后加入#include "EditDlg.h";然后在主对话框上加入4个按钮修改(IDC_CHANGE)、删除(IDC_DELETE)、添加(IDC_ADD)、保存(IDC_SAVE),然后添加他们的响应函数如下:
void  CTestDlg::OnChange() 
{    
// 得到选择项的索引值
    POSITION pos = m_list.GetFirstSelectedItemPosition();
    m_nIndex
= m_list.GetNextSelectedItem(pos);

    
if (m_nIndex ==- 1 )
    {
        MessageBox(
" 请选择一项再修改! " , " 提示 " ,MB_ICONINFORMATION);
        
return ;
    }

    CEditDlg edlg;
    edlg.m_StudentID
= m_list.GetItemText(m_nIndex, 0 );
    edlg.m_StudentName
= m_list.GetItemText(m_nIndex, 1 );
    
if (edlg.DoModal() == IDOK)
    {
        m_list.SetItemText(m_nIndex,
0 ,edlg.m_StudentID);
        m_list.SetItemText(m_nIndex,
1 ,edlg.m_StudentName);
    }
}

void  CTestDlg::OnDelete() 
{    
    POSITION pos
= m_list.GetFirstSelectedItemPosition();
    m_nIndex
= m_list.GetNextSelectedItem(pos);

    
if (m_nIndex ==- 1 )
    {
        MessageBox(
" 请选择一项! " , " 提示 " ,MB_ICONINFORMATION);
        
return ;
    }
    m_list.DeleteItem(m_nIndex);
// 下面这2句的作用是刷新当前所指记录位置,以便连续删除
//     UINT flag = LVIS_SELECTED|LVIS_FOCUSED;
//     m_list.SetItemState(m_nIndex-1, flag, flag);    
}

void  CTestDlg::OnAdd() 
{
    CEditDlg edlg;
    
if (edlg.DoModal() == IDOK)
    {
        
if (edlg.m_StudentID == "" )            
            
return ;        
        m_nIndex
= m_list.GetItemCount();
        m_list.InsertItem(m_nIndex,edlg.m_StudentID);    
        m_list.SetItemText(m_nIndex,
1 ,edlg.m_StudentName);        
    }
}

void  CTestDlg::OnSave() 
{    
    CStdioFile sf;
    
if (sf.Open( " 资料.txt " ,CFile::modeCreate  |  CFile::modeWrite))
    {
        CString strOut;
        strOut
= " 学号\t\t姓名\r\n " ;
        sf.WriteString(strOut);
        
for ( int  i = 0 ;i < m_list.GetItemCount();i ++
        {
            strOut
= m_list.GetItemText(i, 0 +   " \t " + m_list.GetItemText(i, 1 ) + " \r\n " ;
            sf.WriteString(strOut);
        }    
        sf.Close();
        MessageBox(
" 保存成功! " , " 提示 " ,MB_ICONINFORMATION);
    }
    
else
        MessageBox(
" 保存失败! " , " 提示 " ,MB_ICONINFORMATION);  
}

好了,现在就编译运行吧~你看到的结果应该是(现在上传不了图,暂时,以后会贴上来的)

你可能感兴趣的:(list)