VC CListCtrl控件的上移和下移的通用方法

/**************************************************************************
函数名称:CCommonFuntions::OnCListCtrlUp
描    述: 对CListCtrl记录的上移操作
输入参数: 
        *listCtrl   对某个CListCtrl对象进行上移操作的CListCtrl指针
        nColumn     CListCtrl对象列数目(不大于30列)

输出参数: 无
返    回: 无
*************************************************************************
*/

void  CCommonFuntions::OnCListCtrlUp(CListCtrl  * listCtrl,  int  nColumn)
{
    listCtrl
->SetFocus();
    POSITION pos;
    pos 
= listCtrl->GetFirstSelectedItemPosition();

    
// 得到项目索引
    int index = listCtrl->GetNextSelectedItem(pos);  
    
if (index == -1)
        
return;

    
// 判断所选项是否位于行首
    if (index == 0)
    
{
        AfxMessageBox(
"已经位于第一行!");
        
return;
    }


    
// 提取所选列表项各列类容

    CString tempField[
30];
    
for (int i=1; i<=nColumn; i++)
    
{
        tempField[i] 
= listCtrl->GetItemText(index, i-1);
    }


    
// 删除所选列表项
    listCtrl->DeleteItem(index);

    
// 在IndexInFieldList-1位置处插入上面所删列表项的各列类容
    int tempItem;

    tempItem 
= listCtrl->InsertItem(index-1,tempField[1]);
    
for (int j=1; j<nColumn; j++)
    
{
        listCtrl
->SetItemText(tempItem, j,tempField[j+1]);
    }


    index
--;

    
// 使得IndexInFieldList-1位置处项目高亮显示并获得焦点

    UINT flag 
= LVIS_SELECTED|LVIS_FOCUSED;
    listCtrl
->SetItemState(index, flag, flag);
}

/**************************************************************************
函数名称:CCommonFuntions::OnCListCtrlDown
描    述: 对CListCtrl记录的下移操作
输入参数: 
*listCtrl   对某个CListCtrl对象进行下移操作的CListCtrl指针
nColumn     CListCtrl对象列数目(不大于30列)

输出参数: 无
返    回: 无
*************************************************************************
*/

void  CCommonFuntions::OnCListCtrlDown(CListCtrl  * listCtrl,  int  nColumn)
{
    listCtrl
->SetFocus();
    POSITION pos;
    pos 
= listCtrl->GetFirstSelectedItemPosition();

    
// 得到项目索引
    int index = listCtrl->GetNextSelectedItem(pos);  
    
if (index == -1)
        
return;

    
// 判断所选项是否位于最后一行
    if (index == listCtrl->GetItemCount()-1)
    
{
        AfxMessageBox(
"已经位于最后一行!");
        
return;
    }


    
// 提取所选列表项各列类容
    CString tempField[30];
    
for (int i=1; i<=nColumn; i++)
    
{
        tempField[i] 
= listCtrl->GetItemText(index, i-1);
    }


    
// 删除所选列表项
    listCtrl->DeleteItem(index);

    
// 在IndexInFieldList+1位置处插入上面所删列表项的各列类容
    int tempItem;

    tempItem 
= listCtrl->InsertItem(index+1,tempField[1]);
    
for (int j=1; j<nColumn; j++)
    
{
        listCtrl
->SetItemText(tempItem, j,tempField[j+1]);
    }


    index
++;

    
// 使得IndexInFieldList+1位置处项目高亮显示并获得焦点

    UINT flag 
= LVIS_SELECTED|LVIS_FOCUSED;
    listCtrl
->SetItemState(index, flag, flag);
}

你可能感兴趣的:(VC CListCtrl控件的上移和下移的通用方法)