MFC树形控件的图标问题?

Sire008 2017-12-05 05:48:57
m_imageList.Create(16,16,ILC_COLOR32|ILC_MASK,4,4);
CBitmap b1,b2,b3;
b1.LoadBitmapW(IDB_BITMAP1);
b2.LoadBitmapW(IDB_BITMAP2);
b3.LoadBitmapW(IDB_BITMAP3);

IDB_BITMAP1磁盘图标的ID,IDB_BITMAP2 文件夹图标的ID,IDB_BITMAP3文件图标的ID,
前两个都可以显示,文件图标总是显示不出来,求解。
...全文
298 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-12-08
  • 打赏
  • 举报
回复

HTREEITEM CDirTreeCtrl::AddItem(HTREEITEM hParent, LPCTSTR strPath)
{// Adding the Item to the TreeCtrl with the current Icons
	SHFILEINFO shFinfo;
	int iIcon, iIconSel;
    CString    strTemp = strPath;
    
	if ( strTemp.Right(1) != '\\' ) strTemp += "\\";
	if ( !SHGetFileInfo( strTemp,
						0,
						&shFinfo,
						sizeof( shFinfo),
						SHGFI_ICON | 
					    SHGFI_SMALLICON))
	{
		m_strError = "Error Gettting SystemFileInfo!";
		return NULL;
	}
	iIcon = shFinfo.iIcon;
	// we only need the index from the system image list
	DestroyIcon( shFinfo.hIcon );
	if( !SHGetFileInfo( strTemp,
						0,
						&shFinfo,
						sizeof( shFinfo ),
						SHGFI_ICON | SHGFI_OPENICON |
					    SHGFI_SMALLICON))
	{
		m_strError = "Error Gettting SystemFileInfo!";
		return NULL;
	}
	iIconSel = shFinfo.iIcon;
	// we only need the index of the system image list
	DestroyIcon( shFinfo.hIcon );
	if ( strTemp.Right(1) == "\\" ) strTemp.SetAt( strTemp.GetLength() - 1, '\0' );
	
	if ( hParent == TVI_ROOT ) return InsertItem( strTemp, iIcon, iIconSel, hParent );
	
	return InsertItem( GetSubPath( strTemp ), iIcon, iIconSel, hParent );
}
schlafenhamster 2017-12-08
  • 打赏
  • 举报
回复
应该取系统的 图标,

BOOL CDirTreeCtrl::GetSysImgList()
{
	SHFILEINFO shFinfo;
	HIMAGELIST hImgList = NULL;

	if (GetImageList(TVSIL_NORMAL)) m_imgList.Detach();
	
	hImgList = (HIMAGELIST)SHGetFileInfo( "C:\\",
							  0,
							  &shFinfo,
							  sizeof( shFinfo ),
							  SHGFI_SYSICONINDEX | 
							  SHGFI_SMALLICON );
	if( !hImgList )
	{
		m_strError = "Cannot retrieve the Handle of SystemImageList!";
		return FALSE;
	}

	m_imgList.m_hImageList = hImgList;    
    
	SetImageList( &m_imgList, TVSIL_NORMAL );
	return TRUE;   // OK
}
sichuanwww 2017-12-08
  • 打赏
  • 举报
回复
Sire008 2017-12-06
  • 打赏
  • 举报
回复

BOOL b = find.IsDirectory();
if(b)
{
hItem = m_mytree.m_tree.InsertItem(FileName,1,1,hRoot);//文件夹;
}else
{
hItem = m_mytree.m_tree.InsertItem(FileName,2,2,hRoot);//文件;

}

问题具体到了,我把上边的参数2,2改成1,1,文件是可以显示文件夹的图标,怎么改,有点蒙
zgl7903 2017-12-06
  • 打赏
  • 举报
回复
TreeCtrl 添加子项的时候 TVIF_IMAGE 掩码 和 iImage 索引是否正常?
Sire008 2017-12-06
  • 打赏
  • 举报
回复
m_imageList.Add(&b1,RGB(255,255,255)); 没设置,是默认的
Sire008 2017-12-06
  • 打赏
  • 举报
回复
问题已解决,位图的问题,谢谢各位
Eleven 2017-12-05
  • 打赏
  • 举报
回复
你看看CImageList::Add()的返回值是什么?
Sire008 2017-12-05
  • 打赏
  • 举报
回复
好的,我试试,
red-fly 2017-12-05
  • 打赏
  • 举报
回复
可以稍改一下先确定下问题:

b1.LoadBitmapW(IDB_BITMAP3);
b2.LoadBitmapW(IDB_BITMAP2);
b3.LoadBitmapW(IDB_BITMAP1);


这样就把原来应该显示在3的地方显示到1上了。
如果仍然是b1可以显示而b3不可以显示,那肯定就是b3的处理流程有问题,如果变成 了b1不能显示而b3可以显示,那就说明原始的bmp文件有问题

15,980

社区成员

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

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