如何在listctrl中多项拖动时显示图标

onlynight 2002-10-22 10:33:59
在listctrl中多选 然后拖动
请问如何使光标能显示所有选项
并且在不可放开鼠标时 光标上有所提示
如资源管理器一样
谢谢!
...全文
171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoyo2002 2002-10-25
  • 打赏
  • 举报
回复
CImageList* CSelectionDlg::CreateDragImageEx(CListCtrl *pList, LPPOINT lpPoint)
{
if (pList->GetSelectedCount() <= 0)
return NULL; // no row selected

CRect rectSingle;
CRect rectComplete(0,0,0,0);

// Determine List Control Client width size
pList->GetClientRect(rectSingle);
int nWidth = rectSingle.Width();

// Start and Stop index in view area
int nIndex = pList->GetTopIndex() - 1;
int nBottomIndex = pList->GetTopIndex() + pList->GetCountPerPage() - 1;
if (nBottomIndex > (pList->GetItemCount() - 1))
nBottomIndex = pList->GetItemCount() - 1;

// Determine the size of the drag image (limite for rows visibled and Client width)
while ((nIndex = pList->GetNextItem(nIndex, LVNI_SELECTED)) != -1)
{
if (nIndex > nBottomIndex)
break;

pList->GetItemRect(nIndex, rectSingle, LVIR_BOUNDS);

if (rectSingle.left < 0)
rectSingle.left = 0;

if (rectSingle.right > nWidth)
rectSingle.right = nWidth;

rectComplete.UnionRect(rectComplete, rectSingle);
}

CClientDC dcClient(this);
CDC dcMem;
CBitmap Bitmap;

if (!dcMem.CreateCompatibleDC(&dcClient))
return NULL;

if (!Bitmap.CreateCompatibleBitmap(&dcClient, rectComplete.Width(), rectComplete.Height()))
return NULL;

CBitmap *pOldMemDCBitmap = dcMem.SelectObject(&Bitmap);
// Use green as mask color
dcMem.FillSolidRect(0, 0, rectComplete.Width(), rectComplete.Height(), RGB(0,255,0));

// Paint each DragImage in the DC
nIndex = pList->GetTopIndex() - 1;
while ((nIndex = pList->GetNextItem(nIndex, LVNI_SELECTED)) != -1)
{
if (nIndex > nBottomIndex)
break;

CPoint pt;
CImageList* pSingleImageList = pList->CreateDragImage(nIndex, &pt);

if (pSingleImageList)
{
pList->GetItemRect(nIndex, rectSingle, LVIR_BOUNDS);
pSingleImageList->Draw( &dcMem,
0,
CPoint(rectSingle.left - rectComplete.left,
rectSingle.top - rectComplete.top),
ILD_MASK);
pSingleImageList->DeleteImageList();
delete pSingleImageList;
}
}

dcMem.SelectObject(pOldMemDCBitmap);
CImageList* pCompleteImageList = new CImageList;
pCompleteImageList->Create(rectComplete.Width(), rectComplete.Height(), ILC_COLOR | ILC_MASK, 0, 1);
pCompleteImageList->Add(&Bitmap, RGB(0, 255, 0)); // Green is used as mask color
Bitmap.DeleteObject();

if (lpPoint)
{
lpPoint->x = rectComplete.left;
lpPoint->y = rectComplete.top;
}

return pCompleteImageList;
}
onlynight 2002-10-24
  • 打赏
  • 举报
回复
自己up
nevergrief 2002-10-23
  • 打赏
  • 举报
回复
其中IDC_CURSOR1到9都是你从资源里倒入到.cur文件的资源名称。
nevergrief 2002-10-23
  • 打赏
  • 举报
回复
自己更改鼠标cur啊!!!

//例8 更换鼠标形状
class CMyCursorView : public CView
{
public:
HCURSOR CUR; // 创建光标
protected:
void LoadCursorID(UINT Cur);
UINT CurName;
void CapPoint(CPoint MousePos);
}
void CMyCursorView::LoadCursorID(UINT Cur)
{
CurName=Cur;
}
void CMyCursorView::CapPoint(CPoint MousePos)
{
CRect r;
GetClientRect(&r);
int Width,Height;
Width=MousePos.x/(r.right/3);
Height=MousePos.y/(r.bottom/3);
switch(Width)
{
case 0:
switch(Height)
{
case 0:LoadCursorID(IDC_CURSOR1);break;
case 1:LoadCursorID(IDC_CURSOR2);break;
case 2:LoadCursorID(IDC_CURSOR3);break;
}break;
case 1:
switch(Height)
{
case 0:LoadCursorID(IDC_CURSOR4);break;
case 1:LoadCursorID(IDC_CURSOR5);break;
case 2:LoadCursorID(IDC_CURSOR6);break;
}break;
case 2:
switch(Height)
{
case 0:LoadCursorID(IDC_CURSOR7);break;
case 1:LoadCursorID(IDC_CURSOR8);break;
case 2:LoadCursorID(IDC_CURSOR9);break;
}break;
}
CUR=AfxGetApp()->LoadCursor(CurName);
Invalidate(); // 刷新窗口
}
void CMyCursorView::OnMouseMove(UINT nFlags, CPoint point)
{
CapPoint(point);
::SetCursor(CUR);
Invalidate();
CView::OnMouseMove(nFlags, point);
}
onlynight 2002-10-23
  • 打赏
  • 举报
回复
可能是我没有说清楚 楼上的朋友误解了
我是要在光标下面显示当前所选中进行drag的所有选项
内容概要:本文档聚焦于通信系统的调制解调技术与Turbo码的结合应用,系统研究了GMSK调制的二比特差分解调方法,以及Turbo码分别与BPSK、GMSK调制方式联合使用的系统性能。通过Matlab平台实现了完整的通信链路仿真,涵盖信号调制、信道编码、解调解码及误码率分析等关键环节,深入探讨了不同调制体制下Turbo编码系统的抗干扰能力与频谱效率表现。研究不仅提供了算法实现代码,还包含了详细的性能对比分析,有助于理解现代数字通信高效编码调制技术的设计原理与工程实现。此外,文档附带多个相关科研方向的仿真案例,展现出广泛的技术延展性与实际应用价值。; 适合人群:具备通信原理、数字信号处理等相关基础知识,熟悉Matlab编程环境,正在从事无线通信系统仿真、信道编码理论研究或相关领域科研工作的研究生、高校教师及工程技术研究人员。; 使用场景及目标:①深入掌握GMSK调制与Turbo码相结合的技术机制,理解其在提高通信可靠性与频谱利用率方面的优势;②熟练运用Matlab构建完整的数字通信仿真系统,完成从调制编码到解调译码的全流程建模与性能评估;③为无人机通信、卫星通信、移动通信等实际应用场景下的高可靠传输系统设计提供理论支持与算法参考。; 阅读建议:建议结合所提供的Matlab代码逐模块运行与调试,重点关注GMSK差分解调过程与Turbo译码的迭代收敛特性,同可参考文档列出的其他研究课题拓展仿真范围,提升综合科研与工程实践能力。
下载代码方式:https://pan.quark.cn/s/a4b39357ea24 标题所指的"RS485转USB驱动"是一种硬件接口转换技术,其功能在于将传统的RS485通信协议转换为USB接口形式,从而使得现代计算机或设备能够便捷地与采用RS485协议的设备展开通信。RS485作为一种在工业控制、远程通信及多点系统得到普遍应用的串行通信标准,具备传输距离长、抗干扰性能优异等显著优势。文提及的型号(CH340、CH341、FT232RL、PL2303、Y-105)是几种常见的USB至UART(通用异步接收发送器)桥接芯片,它们在USB接口与RS485网络之间充当转换媒介的角色。这些芯片赋予USB通信能力,使得计算机可以通过USB接口与RS485网络的设备执行数据交换。 1. CH340/CH341:这些由韦东山科技研制的USB转串口芯片,常被用于构建低成本的USB转串口适配器。它们提供从USB到UART的转换功能,支持多种波特率的设定,并且在Windows操作系统环境下通常需要安装相应的驱动程序方可正常运作。 2. FT232RL:FTDI公司推出的一款高性能且低功耗的USB到UART桥接器。FT232RL配备全速USB 1.1接口,支持多种串行接口模式,在数据通信、工业控制等领域能够得到广泛应用。同样地,采用FT232RL的设备在连接至电脑也需要安装对应的驱动程序。 3. PL2303:硅光电子(Prolific)公司所生产的产品,亦是一种常用的USB到UART桥接芯片。它展现出良好的兼容性以及广泛的驱动程序支持,适用于各类USB至串口的应用场景。 4. Y-105:这可能是一款特定的RS485转USB转换模块,或许集成了上述其一种或多种转换...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧