MFC中,实现拖拽式复制对话框上的Listbox的文本数据功能
时间: 2024-05-15 07:15:45 浏览: 130
WPF ListBox实现上移下移功能
1. 在对话框资源中添加一个Listbox控件,并设置好ID和属性。
2. 在类视图中添加成员变量,将Listbox控件变量类型设置为CListBox,如下所示:
```
CListBox m_lstData;
```
3. 在OnInitDialog函数中,进行Listbox控件的初始化,如下所示:
```
m_lstData.SubclassDlgItem(IDC_LIST_DATA, this);
```
4. 实现拖拽操作,可以在Listbox控件的OnLButtonDown和OnMouseMove函数中实现,如下所示:
```
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// 获取选中的项
int nIndex = m_lstData.ItemFromPoint(point);
// 如果没有选中项,则返回
if (nIndex == LB_ERR)
return;
// 设置拖拽数据
COleDataSource* pDataSource = new COleDataSource();
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, 1024);
char* pData = (char*)GlobalLock(hMem);
m_lstData.GetText(nIndex, pData);
GlobalUnlock(hMem);
pDataSource->CacheGlobalData(CF_TEXT, hMem);
// 开始拖拽操作
DROPEFFECT dropEffect = pDataSource->DoDragDrop(DROPEFFECT_COPY);
// 释放资源
pDataSource->Empty();
delete pDataSource;
CDialogEx::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// 如果鼠标左键没有按下,则返回
if (!(nFlags & MK_LBUTTON))
return;
// 设置拖拽效果
COleDropSource* pDropSource = new COleDropSource();
DROPEFFECT dropEffect = pDropSource->StartDrag();
// 释放资源
delete pDropSource;
CDialogEx::OnMouseMove(nFlags, point);
}
```
5. 实现拖拽放置操作,可以在Listbox控件的OnDrop函数中实现,如下所示:
```
DROPEFFECT CMyDlg::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
// 如果数据对象不包含文本,则返回
if (!pDataObject->IsDataAvailable(CF_TEXT))
return DROPEFFECT_NONE;
return DROPEFFECT_COPY;
}
BOOL CMyDlg::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
{
// 如果数据对象不包含文本,则返回
if (!pDataObject->IsDataAvailable(CF_TEXT))
return FALSE;
// 获取文本数据
HGLOBAL hMem = pDataObject->GetGlobalData(CF_TEXT);
char* pData = (char*)GlobalLock(hMem);
CString strData(pData);
GlobalUnlock(hMem);
// 添加到Listbox控件中
m_lstData.AddString(strData);
return TRUE;
}
```
阅读全文