实现功能,通过点上移和下移,实现listbox中的项上移和下移, 自动到头和到尾判断,使上移和下移按
钮失效。无论怎么移动,能正确返回数据源数组的序号。由三个控件组成:m_List1、m_bt1(上移)、
m_bt2(下移),
变量定义:
CStringArray aField; //存放字段名称
int *pList; //应为m_pList;存放列表框中每项放的是实际要展示数组的哪一项。
int m_CurFieldIndex; //当前选定的字段数组的序号
CButton m_btn1; //上移
CButton m_btn2; //下移
CListBox m_List1;
函数定义:
BOOL CGrid2Dlg::OnInitDialog()
{
// TODO: Add extra initialization here
this->aField.Add("姓名");
this->aField.Add("性别");
this->aField.Add("年龄");
this->aField.Add("班级");
pList = new int[aField.GetSize()];
for(int i = 0;i < aField.GetSize();i++)
{
pList[i] = i;
m_List1.InsertString(i,aField.GetAt(i));
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CGrid2Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
int nSel = m_List1.GetCurSel();
if(LB_ERR == nSel)
return;
int nExc = pList[nSel];
pList[nSel] = pList[nSel - 1];
pList[nSel - 1] = nExc;
RefreshList(nSel - 1);
}
void CGrid2Dlg::RefreshList(int nSetSel)
{
// int nSel = m_List1.GetCurSel();
if (0 == nSetSel)
{
m_btn1.EnableWindow(FALSE);
m_btn1.Invalidate();
}
else
{
m_btn1.EnableWindow(TRUE);
m_btn1.Invalidate();
}
if ((m_List1.GetCount() - 1) == nSetSel)
{
m_btn2.EnableWindow(FALSE);
m_btn2.Invalidate();
}
else
{
m_btn2.EnableWindow(TRUE);
m_btn2.Invalidate();
}
m_List1.ResetContent();
for(int i = 0;i < aField.GetSize();i++)
{
m_List1.InsertString(i,aField[pList[i]]);
}
//m_List1.SetSel(nSetSel);
m_List1.SetCurSel(nSetSel);
//m_List1.SetFocus();
m_CurFieldIndex = pList[nSetSel];
CString strTmp;
strTmp.Format("%d",m_CurFieldIndex);
MessageBox(strTmp);
m_List1.Invalidate();
}
void CGrid2Dlg::OnSelchangeList1()
{
int nSel = m_List1.GetCurSel();
RefreshList(nSel);
// TODO: Add your control notification handler code here
//CString strTmp;
//strTmp.Format("%d",m_CurFieldIndex);
//MessageBox(strTmp);
}
void CGrid2Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
int nSel = m_List1.GetCurSel();
if(LB_ERR == nSel) return;
int nExc = pList[nSel];
pList[nSel] = pList[nSel + 1];
pList[nSel + 1] = nExc;
RefreshList(nSel + 1);
}