以下代码是在做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);
}
}