MFC中ListCtrl控件加入图标的问题。 50

MFC中,m_ListCtrl.SetImageList(&m_imagelist,LVSIL_SMALL)后,添加一条记录时,列表的第0列都会加入图标。问题1:我现在想... MFC中,m_ListCtrl.SetImageList(&m_imagelist,LVSIL_SMALL)后,添加一条记录时,列表的第0列都会加入图标。
问题1:我现在想在第0列不加入图标,第1列加入图标,该怎么实现?
问题2:还有就是在ListCtrl控件中,能否同时加入不同大小的图片。比如说第0列加入的图片是16*16,第2列加入的图片是48*16。
展开
 我来答
百度网友2742c9851
2011-01-25 · 超过31用户采纳过TA的回答
知道答主
回答量:156
采纳率:0%
帮助的人:109万
展开全部
1 控件本身,只有第一列可以加图标,可以通过交换两列实现。
2 可以,就是利用控件自绘,单元格的内容完全自己画
参考
http://www.codeproject.com/KB/list/lvcustomdraw.aspx
http://www.codeproject.com/KB/list/xlistctrl.aspx
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-01-28
展开全部
问题一:可以创建好ListCtrl后,将第一列删除。或者将你一列宽度设置为0,然后捕获listCtrl的HDN_BEGINTRACKA 、HDN_BEGINTRACKW消息将第一列不允许拖动。
问题二:不清楚,等待后面的高手。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxqinge
2011-01-25 · TA获得超过2397个赞
知道答主
回答量:256
采纳率:0%
帮助的人:178万
展开全部
在CListCtrl显示文件,并根据文件类型来显示图标
网上找到的代码,share
BOOL CTest6Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

HIMAGELIST himlSmall;
HIMAGELIST himlLarge;
SHFILEINFO sfi;
char cSysDir[MAX_PATH];
CString strBuf;

memset(cSysDir, 0, MAX_PATH);

GetWindowsDirectory(cSysDir, MAX_PATH);
strBuf = cSysDir;
sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("\\")+1));

himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );

himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);

if (himlSmall && himlLarge)
{
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);
}
return TRUE; // return TRUE unless you set the focus to a control
}

void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)
{
int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);
CString strSize;
CFileFind filefind;

// get file size
if (filefind.FindFile(lpszFileName))
{
filefind.FindNextFile();
strSize.Format("%d", filefind.GetLength());
}
else
strSize = "0";

// split path and filename
CString strFileName = lpszFileName;
CString strPath;

int nPos = strFileName.ReverseFind('\\');
if (nPos != -1)
{
strPath = strFileName.Left(nPos);
strFileName = strFileName.Mid(nPos + 1);
}

// insert to list
int nItem = m_list.GetItemCount();
m_list.InsertItem(nItem, strFileName, nIcon);
m_list.SetItemText(nItem, 1, strSize);
m_list.SetItemText(nItem, 2, strFileName.Right(3));
m_list.SetItemText(nItem, 3, strPath);
}

int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)
{
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));

if (bIsDir)
{
SHGetFileInfo(lpszPath,
FILE_ATTRIBUTE_DIRECTORY,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
else
{
SHGetFileInfo (lpszPath,
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
return -1;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式