社区
VC.NET
帖子详情
实现ListControl控件中元素拖放功能(顶者有分)
wxaxiao
2004-09-23 06:04:40
怎样实现ListControl控件中元素拖放功能?
将同一元素从彼ListControl拖动到另一ListControl中去?
虚心请教各位同仁:)
如果能详细一些最好,谢了:)
...全文
223
21
打赏
收藏
实现ListControl控件中元素拖放功能(顶者有分)
怎样实现ListControl控件中元素拖放功能? 将同一元素从彼ListControl拖动到另一ListControl中去? 虚心请教各位同仁:) 如果能详细一些最好,谢了:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wxaxiao
2004-11-05
打赏
举报
回复
已实现,主要是光标指向没处理好。还是多谢大家捧场
canoe_eyes
2004-10-21
打赏
举报
回复
标记
amendajing
2004-10-21
打赏
举报
回复
学习一下
wxaxiao
2004-10-08
打赏
举报
回复
void CControlListboxDlg::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
{
pDropList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
char szLabel[256];
LVITEM lviT;
LVITEM* plvitem;
ZeroMemory(&lviT, sizeof (LVITEM));
lviT.iItem = m_nDragIndex;
lviT.mask = LVIF_TEXT;
lviT.pszText = szLabel;
lviT.cchTextMax = 255;
lvItem* pItem;
lvItem lvi;
lvi.plvi = &lviT;
lvi.plvi->iItem = m_nDragIndex;
lvi.plvi->mask = LVIF_TEXT;
lvi.plvi->pszText = szLabel;
lvi.plvi->cchTextMax = 255;
if(pDragList->GetSelectedCount() == 1)
{
pDragList->GetItem (lvi.plvi);
lvi.sCol2 = pDragList->GetItemText(lvi.plvi->iItem, 1);
if(pDragList == pDropList)
{
pDragList->DeleteItem (m_nDragIndex);
if(m_nDragIndex < m_nDropIndex) m_nDropIndex--;
}
lvi.plvi->iItem = (m_nDropIndex == -1) ? pDropList->GetItemCount () : m_nDropIndex;
pDropList->InsertItem (lvi.plvi);
POSITION pos = pDragList->GetFirstSelectedItemPosition();
pDragList->DeleteItem(lvi.plvi->iItem);
pDropList->SetItemText(lvi.plvi->iItem, 1, (LPCTSTR)lvi.sCol2);
pDropList->SetItemState (lvi.plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
}
else
{
CList<lvItem*, lvItem*> listItems;
POSITION listPos;
POSITION pos = pDragList->GetFirstSelectedItemPosition();
while(pos)
{
plvitem = new LVITEM;
ZeroMemory(plvitem, sizeof(LVITEM));
pItem = new lvItem;
pItem->plvi = plvitem;
pItem->plvi->iItem = m_nDragIndex;
pItem->plvi->mask = LVIF_TEXT;
pItem->plvi->pszText = new char;
pItem->plvi->cchTextMax = 255;
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
pItem->plvi->iItem = m_nDragIndex;
pDragList->GetItem(pItem->plvi);
pItem->sCol2 = pDragList->GetItemText(pItem->plvi->iItem, 1);
listItems.AddTail(pItem);
}
if(pDragList == pDropList)
{
pos = pDragList->GetFirstSelectedItemPosition();
while(pos)
{
pos = pDragList->GetFirstSelectedItemPosition();
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
pDragList->DeleteItem(m_nDragIndex); if(m_nDragIndex < m_nDropIndex) m_nDropIndex--;
}
}
listPos = listItems.GetHeadPosition();
while(listPos)
{
pItem = listItems.GetNext(listPos);
m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
pItem->plvi->iItem = m_nDropIndex;
pDropList->InsertItem(pItem->plvi);
pDropList->SetItemText(pItem->plvi->iItem, 1, pItem->sCol2);
pDropList->SetItemState(pItem->plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
m_nDropIndex++;
}
}
}
wxaxiao
2004-10-08
打赏
举报
回复
void CControlListboxDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_bDragging)
{
ReleaseCapture ();
m_bDragging = FALSE;
m_pDragImage->DragLeave (GetDesktopWindow ());
m_pDragImage->EndDrag ();
delete m_pDragImage;
CPoint pt (point);
ClientToScreen (&pt);
CWnd* pDropWnd = WindowFromPoint (pt);
ASSERT (pDropWnd);
if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl)))
{
m_pDropList = (CListCtrl*)pDropWnd;
DropItemOnList(m_pDragList, m_pDropList);
}
}
CDialog::OnLButtonUp(nFlags, point);
}
void CControlListboxDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_bDragging)
{
CPoint pt(point);
ClientToScreen(&pt);
m_pDragImage->DragMove(pt);
m_pDragImage->DragShowNolock(false);
CWnd* pDropWnd = WindowFromPoint (pt);
ASSERT(pDropWnd);
if (pDropWnd != m_pDropWnd)
{
if (m_nDropIndex != -1)
{
TRACE("m_nDropIndex is -1\n");
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
VERIFY (pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED));
VERIFY (pList->RedrawItems (m_nDropIndex, m_nDropIndex));
pList->UpdateWindow ();
m_nDropIndex = -1;
}
else
{
TRACE("m_nDropIndex is not -1\n");
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
int i = 0;
int nCount = pList->GetItemCount();
for(i = 0; i < nCount; i++)
{
pList->SetItemState(i, 0, LVIS_DROPHILITED);
}
pList->RedrawItems(0, nCount);
pList->UpdateWindow();
}
}
if(pDropWnd->IsKindOf(RUNTIME_CLASS (CListCtrl)))
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
UINT uFlags;
CListCtrl* pList = (CListCtrl*)pDropWnd;
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(pt, &uFlags);
pList->SetItemState(m_nDropIndex, LVIS_DROPHILITED, LVIS_DROPHILITED);
pList->RedrawItems(m_nDropIndex, m_nDropIndex);
pList->UpdateWindow();
}
else
{
SetCursor(LoadCursor(NULL, IDC_NO));
}
m_pDragImage->DragShowNolock(true);
}
CDialog::OnMouseMove(nFlags, point);
wxaxiao
2004-10-08
打赏
举报
回复
此问题我已解决,我用三个消息函数实现的,用的是指针
然后想将在拖完后将原元素删除就发生错落现象
我把我的代码贴上,希望大家帮我辅正
warmchang
2004-10-04
打赏
举报
回复
自己写消息相应了;
化外之民
2004-10-02
打赏
举报
回复
UP
wxaxiao
2004-10-01
打赏
举报
回复
自己顶
liricn
2004-09-28
打赏
举报
回复
我也来啊
wxaxiao
2004-09-28
打赏
举报
回复
to DentistryDoctor(牙科医生(潜心修内功,向各位大师取经了)) ,谢啦
我英语不太好,想让让各位兄弟帮帮忙,能有详细说明是最好不过啦,再次谢谢啦
DentistryDoctor
2004-09-27
打赏
举报
回复
http://www.codeguru.com/Cpp/controls/listview/
Drag & Drop
有很多的例子我现成的代码。
wxaxiao
2004-09-27
打赏
举报
回复
ddszhan(高等数学) ,请教此事件处理函数对应的消息类型是LVN_BEGINDRAG吧,他又是怎么生成的呢?
princeml
2004-09-24
打赏
举报
回复
帮你顶!
chan2chen
2004-09-24
打赏
举报
回复
ding!
wxaxiao
2004-09-24
打赏
举报
回复
自己UP
ddszhan
2004-09-24
打赏
举报
回复
BOOL CCaseMngDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// 检查是否为列表的拖拽操作
if (wParam==(UINT)m_lstctlTable.GetDlgCtrlID())
{
LPNMLISTVIEW pnmv = (LPNMLISTVIEW) lParam;
if (pnmv->hdr.code==LVN_BEGINDRAG || pnmv->hdr.code==LVN_BEGINRDRAG)
{
// 标识当前操作是否是列表项的拖拽
m_bLstctlDragging=TRUE;
// 获取鼠标形状
m_hDragCursor=AfxGetApp()->LoadCursor(IDC_DRAGLINK);
m_hNoCursor=AfxGetApp()->LoadCursor(IDC_DROPNOT);
// 设置鼠标为拖拽形状
m_hPreCursor=SetCursor(m_hDragCursor);
SetCapture();
}
}
return CShowBarDlg::OnNotify(wParam, lParam, pResult);
}
fim
2004-09-24
打赏
举报
回复
up
whu
2004-09-24
打赏
举报
回复
最好是用activex控件加上javascript写。
单独用javascript写也可以。把ListControl一些需要的内容通过javascript剪到剪贴板中。
在另一个ListControl的onmouse事件中处理。就可以了,我写过。
BlankFoxCat
2004-09-23
打赏
举报
回复
关注中.....
加载更多回复(1)
VC编程
实现
实现
列表
控件
的扩展风格
VC编程
实现
实现
列表
控件
的扩展风格——
拖放
、整栏选择和显示网格
老九工具资源库之扩展
控件
工具包
以库函数的形式提供的扩展
控件
工具编程资源,包括常见的如
拖放
edit,
拖放
list
、驱动器信息combobox、驱动器信息
list
ctrl、颜色选择器、颜色选择combobox、网格
控件
、增强型农历日历、位图static、内存DC类、快速字体...
JSP
中
EL表达式极简实操入门
内容包括:EL表达式应用之
List
中
元素
的读取、EL表达式应用之Map
中
元素
的读取、EL表达式应用之数组
元素
的读取、EL表达式应用之计算器的
实现
之一、EL表达式应用之计算器的
实现
之二、使用EL访问JavaBean属性之一、使用...
VC++常用
功能
实例
问:
List
控件
中
整栏选择? 75 问:如何重载MRU文件? 76 问:CImage
List
控件
中
图象橙色被显示为黄色? 76 问:无法正确改变应用程序的图标? 78 问:工具条状态的问题? 78 问:在SDI应用程序
中
使用Active
控件
? 79 问:有...
Visual C++2010开发权威指南(共三部分).part1.rar
5.8.9 树
控件
拖放
操作 224 5.8.10 树
控件
项信息 225 5.8.11 树
控件
通知消息 225 5.9 Visual C++ 2010 DBgrid
控件
简介与开发 226 5.9.1 示例程序1 226 5.9.2 示例程序2 227 5.10 Visual C++ 2010 Rebar
控件
简介与开发...
VC.NET
7,540
社区成员
27,673
社区内容
发帖
与我相关
我的任务
VC.NET
.NET技术 VC.NET
复制链接
扫一扫
分享
社区描述
.NET技术 VC.NET
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章