龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

让ListBox控件支持拖动(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
// CMyListBox message handlers void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point) { CListBox::OnLButtonDown(nFlags, point); file://如果选中一个条目,此时进行处理,否则会出错。

 // CMyListBox message handlers
 void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
  {
   CListBox::OnLButtonDown(nFlags, point);
   file://如果选中一个条目,此时进行处理,否则会出错。
  if(GetCurSel() != -1)
   m_LButtonDownFlag = TRUE;
  }

 void CMyListBox::OnLButtonUp(UINT nFlags, CPoint point)
  {
   CListBox::OnLButtonUp(nFlags, point);
   m_LButtonDownFlag = FALSE;
   if(m_MouseMoveFlag)
   {
    m_MouseMoveFlag = FALSE;
    POINT pt;
    ::GetCursorPos(&pt);
    CRect iRect;
    this->GetWindowRect(iRect);
    if(iRect.PtInRect(pt))//确定鼠标移动到了合适的位置
    {
     m_NewPosition = GetCurSel();
     if(m_NewPosition < m_OldPosition)
     {
      InsertString(m_NewPosition,m_DragString);
      DeleteString(m_OldPosition+1);
      this->SetCurSel(m_NewPosition);
      file://设置移动条目的副值,如果删除或者添加一条记录,副值会随字符串一起移动
      SetItemData(m_NewPosition,m_ItemData);
      TRACE("%d%d%d%d%d%d%d%d",GetItemData(0),GetItemData(1),_
GetItemData(2),GetItemData(3),GetItemData(4),_
GetItemData(5),GetItemData(6),GetItemData(7));
}
     else
      {
       InsertString(m_NewPosition+1,m_DragString);
       DeleteString(m_OldPosition);
       this->SetCurSel(m_NewPosition);
       SetItemData(m_NewPosition,m_ItemData);
       TRACE("%d%d%d%d%d%d%d%d",GetItemData(0),GetItemData(1),_
GetItemData(2),GetItemData(3),GetItemData(4),_
GetItemData(5),GetItemData(6),GetItemData(7));
}
     }
   }

  }

  void CMyListBox::OnMouseMove(UINT nFlags, CPoint point)
   {
    CListBox::OnMouseMove(nFlags, point);
    if(m_LButtonDownFlag)
    {
     m_MouseMoveFlag = TRUE;
     m_OldPosition = GetCurSel();
     GetText(m_OldPosition,m_DragString);
     try{
      m_ItemData = GetItemData(m_OldPosition);
     }
    catch(...)
    {
     AfxMessageBox("Wrong!");
    }

    m_LButtonDownFlag = FALSE;
    SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
   }
  }
 

  实现了上面的代码后,我们就可以在列表框中随便改变我们的条目的顺序了,赶快试一下吧!在例程中弹出关于对话框,在列表中就可以改变顺序了。

精彩图集

赞助商链接