为什么没有人提关于CListCtrl的Icon视图图表拖动问题,我要问阿。。

xujunfeng008 2005-08-09 10:49:49
微软说的很清楚、“Icon view
Each item appears as a full-sized icon (32 x 32 pixels) with a label below it. The user can drag the items to any location in the list view window.

但是我做的Icon view就是不能拖动里面的图标,里面的图标就是显示出来就是拖不动的,请问怎么设置??谢谢,在线等待。。。基本代码如下
m_pImageList = new CImageList();
m_pImageList->Create(32,32,true,4,4);
CBitmap bm1, bm2,
bm1.LoadBitmap(IDB_BLUE);
m_pImageList->Add(&bm1, RGB(0, 0, 0));
bm2.LoadBitmap(IDB_BLUE_OVER);
m_pImageList->Add(&bm2, RGB(0, 0, 0));

m_MainList.SetImageList(m_pImageList, LVSIL_NORMAL);

m_MainList.InsertItem(0, m_pGroups[0].pSevPC[i].pcName, 0);
m_MainList.InsertItem(0, m_pGroups[0].pSevPC[i].pcName, 1);


如何做可以用鼠标随便拖动CListCtrl里面的图标到任何位置,在icon view下。再次感激不尽,
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujunfeng008 2005-08-10
  • 打赏
  • 举报
回复
哈哈,仰天一生笑,问题终于被我解决啦。。。
上面的代码修改点,1。把最后一个while循环的pSingleImageList->Draw函数的最后一个参数改为ILD_NORMAL。
2。其他2个地方的位图的Mask像素为RGB(255, 255, 255);

余下的工作就掉调整拖拉后复数图标的位置调整拉
隔日结贴。。。。
xujunfeng008 2005-08-10
  • 打赏
  • 举报
回复
单选拖拉的问题(用的是控件自己提供的CreateDragImage)已经解决啦。但是在复选拖拉时又有问题啦。。我在拖拉的时候,虽然区域的大小跟图标都正确,但是图表的颜色都不正确,都是黑白灰色,不知道为什么。如下是用的创建拖拉位图的代码:

CImageList *CSevWinDlg::CreateDragImageEx( LPPOINT lpPoint) {
CListCtrl *pList = &m_MainList;
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;
}

各位帮我看看有什么问题,感觉没什么问题,但是在拖拉的时候拖拉出来的图标是灰色的。郁闷之级。
xujunfeng008 2005-08-09
  • 打赏
  • 举报
回复
lixiaosan(小三) : 需要drag & drop <---是什么意思?详细点。。。
dirdirdir3(风) :那个地址是说两个列表间的拖拉阿,而且还不是icon视图。
我的问题是,在icon视图内,CListCtrl里面怎么随便拖拉里面的图标
dirdirdir3 2005-08-09
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=1302
lixiaosan 2005-08-09
  • 打赏
  • 举报
回复
需要drag & drop

15,979

社区成员

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

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