网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
让ListBox控件支持拖动
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

通常我们通过ListBox控件来显示我们的信息列表,然后我们可以通过鼠标来选择我们的条目信息,但VC中的ListBox控件是不支持拖动的。也许我们有时需要改变我们的列表顺序,已适应我们的要求,下面是实现的方法。

  设计思路:


  1. 如果通过鼠标左键选中某一条目并拖动,此时我们通过变量记录当前选中条目的位置和条目字符串以及此条目的副值。

  2. 鼠标移动到要移动到的位置后放开左键,此时我们把以前选中的条目插入到此处,同时,删掉原位置的条目。

  实现步骤:

  1. 定义一个从ClistBox类扩展的类CMyListBox,代码下面分析。

  2. 通过新类定义我们的列表控件变量。

  代码分析:


// MyListBox.h : header file
//
// CMyListBox window

class CMyListBox : public CListBox
{
 // Construction
 public:
 CMyListBox();

 // Attributes
 private:
  BOOL m_LButtonDownFlag;
  BOOL m_MouseMoveFlag;
  int m_OldPosition;
  int m_NewPosition;
  CString m_DragString;
  DWORD m_ItemData;
 public:

  // Operations
 public:

  // Overrides
  // ClassWizard generated virtual function overrides
  file://{{AFX_VIRTUAL(CMyListBox)
file://}}AFX_VIRTUAL

 // Implementation
 public:
  virtual ~CMyListBox();

  // Generated message map functions
 protected:
  file://{{AFX_MSG(CMyListBox)
  afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  // NOTE - the ClassWizard will add and remove member functions here.
file://}}AFX_MSG

 DECLARE_MESSAGE_MAP()
};

file://{{AFX_INSERT_LOCATION}}

 #endif //  !defined(AFX_MYLISTBOX_H__CF3EDAA5_BBD7_43CD_80CB_A86B65D9A607__INCLUDED_)


 // MyListBox.cpp : implementation file
 file://

 #include "stdafx.h"
 #include "sditest.h"
 #include "MyListBox.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
 #undef THIS_FILE
 static char THIS_FILE = __FILE__;
 #endif

 // CMyListBox

 CMyListBox::CMyListBox()
  {
   m_LButtonDownFlag = FALSE;
   m_MouseMoveFlag = FALSE;
  }

 CMyListBox::~CMyListBox()
  {
 }


 BEGIN_MESSAGE_MAP(CMyListBox, CListBox)
 file://{{AFX_MSG_MAP(CMyListBox)
 ON_WM_LBUTTONDOWN()
 ON_WM_LBUTTONUP()
 ON_WM_MOUSEMOVE()
 // NOTE - the ClassWizard will add and remove mapping macros here.
 file://}}AFX_MSG_MAP
END_MESSAGE_MAP()

 // 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);
     
  • 上一篇资讯: 用渐变色填充背景
  • 下一篇资讯: 自由自在地使用工具栏
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号