VC++.NET MFC的LIST CONTROL使用技巧1

以下代码是在做VC++的日本项目中编写使用的。

我运行通过并进行过测试,可以正确上下移动。

//
// MODULE   : MoveDown
// ABSTRACT :
// FUNCTION :
// NOTE     :
// RETURN   :
// CREATE   : 08-12-03   
// UPDATE   :
//
void CDlgCommonConditionSetup::MoveUp()
{

    CDWordArray         sel;

    POSITION            pos = m_DetailList.GetFirstSelectedItemPosition();
    int                    selectindex;
    int                    upindex;
    int                    selectindextmp[70];
    int                    postnum;

    postnum=0;
    m_DetailList.SetFocus();
    while(pos)
    {
        selectindex = m_DetailList.GetNextSelectedItem(pos);
        if (selectindex == -1)
            return;

        if (selectindex == 0)
        {
            return;
        }
       
        selectindextmp[postnum]=selectindex;
        postnum++;   
    }

    int j;
    j=0;
   
    while(j<postnum)
    {

        upindex=selectindextmp[j]-1;

        DWORD dwdata = m_DetailList.GetItemData(selectindextmp[j]);
        DWORD tmp = m_DetailList.GetItemData(upindex);


        CString tempField1, tempField2, tempField3,tempField4;
        tempField1 = m_DetailList.GetItemText(selectindextmp[j], 0);
        tempField2 = m_DetailList.GetItemText(selectindextmp[j], 1);
        tempField3 = m_DetailList.GetItemText(selectindextmp[j], 2);
        tempField4 = m_DetailList.GetItemText(selectindextmp[j], 3);

        CString tempField11, tempField22, tempField33,tempField44;
        tempField11 = m_DetailList.GetItemText(selectindextmp[j]-1, 0);
        tempField22 = m_DetailList.GetItemText(selectindextmp[j]-1, 1);
        tempField33 = m_DetailList.GetItemText(selectindextmp[j]-1, 2);
        tempField44 = m_DetailList.GetItemText(selectindextmp[j]-1, 3);

        m_DetailList.SetItemText(selectindextmp[j]-1, 0, _T(tempField1));
        m_DetailList.SetItemText(selectindextmp[j]-1, 1, _T(tempField2));
        m_DetailList.SetItemText(selectindextmp[j]-1, 2, _T(tempField3));
        m_DetailList.SetItemText(selectindextmp[j]-1, 3, _T(tempField4));

        m_DetailList.SetItemText(selectindextmp[j], 0, _T(tempField11));
        m_DetailList.SetItemText(selectindextmp[j], 1, _T(tempField22));
        m_DetailList.SetItemText(selectindextmp[j], 2, _T(tempField33));
        m_DetailList.SetItemText(selectindextmp[j], 3, _T(tempField44));


        selectindextmp[j]--;

        CString strlist1;

        for (int i=0;i<m_DetailList.GetItemCount();i++ )
        {
            strlist1.Format("%d",i+1);
            strlist1.Trim();           
            m_DetailList.SetItemText(i, 0, _T(strlist1));           
        }

        m_DetailList.SetItemState(selectindextmp[j]+1,0, LVIS_SELECTED | LVIS_FOCUSED);
       
        m_pHasSelectedDetailArray->GetAt(selectindextmp[j])->m_iDisplayID++;
        m_pHasSelectedDetailArray->GetAt(selectindextmp[j]+1)->m_iDisplayID--;

        CKosyoriAlarmDetailInfo hasSelectedDetail;
        hasSelectedDetail = *m_pHasSelectedDetailArray->GetAt(selectindextmp[j]+1);
        *m_pHasSelectedDetailArray->GetAt(selectindextmp[j]+1)=*m_pHasSelectedDetailArray->GetAt(selectindextmp[j]);
        *m_pHasSelectedDetailArray->GetAt(selectindextmp[j])=hasSelectedDetail;

        m_pHasSelectedDetailArray->GetAt(selectindextmp[j])->flgChanged=1;
   
        m_DetailList.SetFocus();
        m_DetailList.SetItemState(selectindextmp[j], LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
       
        j++;
    }

}
//
// MODULE   : MoveDown
// ABSTRACT :
// FUNCTION :
// NOTE     :
// RETURN   :
// CREATE   : 08-12-03   
// UPDATE   :
//
void CDlgCommonConditionSetup::MoveDown()
{
    CDWordArray         sel;

    POSITION            pos = m_DetailList.GetFirstSelectedItemPosition();
    int                    selectindex;
    int                    downindex;
    int                    selectindextmp[70];
    int                    postnum;
    m_DetailList.SetFocus();
    postnum =0 ;
    while(pos)
    {
        selectindex = m_DetailList.GetNextSelectedItem(pos);
        if (selectindex == -1)
            return;

        if (selectindex == m_DetailList.GetItemCount()-1)
        {
            return;
        }
       
        selectindextmp[postnum]=selectindex;
        postnum++;   
    }

    while(postnum)
    {
        postnum--;
        downindex=selectindextmp[postnum]+1;

        DWORD dwdata = m_DetailList.GetItemData(selectindextmp[postnum]);
        DWORD tmp = m_DetailList.GetItemData(downindex);


        CString tempField1, tempField2, tempField3,tempField4;
        tempField1 = m_DetailList.GetItemText(selectindextmp[postnum], 0);
        tempField2 = m_DetailList.GetItemText(selectindextmp[postnum], 1);
        tempField3 = m_DetailList.GetItemText(selectindextmp[postnum], 2);
        tempField4 = m_DetailList.GetItemText(selectindextmp[postnum], 3);
       
        CString tempField11, tempField22, tempField33,tempField44;
        tempField11 = m_DetailList.GetItemText(selectindextmp[postnum]+1, 0);
        tempField22 = m_DetailList.GetItemText(selectindextmp[postnum]+1, 1);
        tempField33 = m_DetailList.GetItemText(selectindextmp[postnum]+1, 2);
        tempField44 = m_DetailList.GetItemText(selectindextmp[postnum]+1, 3);

        m_DetailList.SetItemText(selectindextmp[postnum]+1, 0, _T(tempField1));
        m_DetailList.SetItemText(selectindextmp[postnum]+1, 1, _T(tempField2));
        m_DetailList.SetItemText(selectindextmp[postnum]+1, 2, _T(tempField3));
        m_DetailList.SetItemText(selectindextmp[postnum]+1, 3, _T(tempField4));

        m_DetailList.SetItemText(selectindextmp[postnum], 0, _T(tempField11));
        m_DetailList.SetItemText(selectindextmp[postnum], 1, _T(tempField22));
        m_DetailList.SetItemText(selectindextmp[postnum], 2, _T(tempField33));
        m_DetailList.SetItemText(selectindextmp[postnum], 3, _T(tempField44));

        selectindextmp[postnum]++;

        CString strlist1;

        for (int i=0;i<m_DetailList.GetItemCount();i++ )
        {
            strlist1.Format("%d",i+1);
            strlist1.Trim();
            m_DetailList.SetItemText(i, 0, _T(strlist1));           
        }

        m_DetailList.SetItemState(selectindextmp[postnum]-1,0, LVIS_SELECTED | LVIS_FOCUSED);
        m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum])->m_iDisplayID--;
        m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum]-1)->m_iDisplayID++;
       
        CKosyoriAlarmDetailInfo hasSelectedDetail;
        hasSelectedDetail = *m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum]-1);
        *m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum]-1)=*m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum]);
        *m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum])=hasSelectedDetail;

        m_pHasSelectedDetailArray->GetAt(selectindextmp[postnum])->flgChanged=1;

        m_DetailList.SetFocus();
        m_DetailList.SetItemState(selectindextmp[postnum], LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值