使用CImageList遇到的问题?

fhw217 2015-06-17 08:59:14
图标是VS自动生成的,现在的问题是控件中显示的图标有黑边,请问怎么解决?



代码:

CImageList imgList;
imgList.Create(48, 48, ILC_COLOR32|ILC_MASK, 0, 1);

imgList.Add(AfxGetApp()->LoadIcon(IDR_MAINFRAME));

m_ctlList.SetImageList(&imgList, LVSIL_NORMAL);

imgList.Detach();

// m_ctlList是CListCtrl控件
m_ctlList.InsertItem(0, _T("fan"), 0);
...全文
102 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhw217 2015-06-18
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
图像好像是被缩放过了 LoadIcon 加载的是系统默认大小的图标(好像是16×16的), 用LoadImage加载和你ImageList大小匹配的图标试试看
这样使用LoadImage对吗,但是还有黑边。

	HICON hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(), (LPCTSTR)IDR_MAINFRAME, IMAGE_ICON, 48, 48, 0);
赵4老师 2015-06-18
  • 打赏
  • 举报
回复
向6楼学习!向6楼致敬!
turbo_casey 2015-06-18
  • 打赏
  • 举报
回复
引用 5 楼 fhw_bin_dl 的回复:
[quote=引用 4 楼 SB_casey 的回复:] 这个是缩放造成的,用至少是24*24 以上的ICO图片,最后刷一遍 icon 缓存就OK
请问如何刷Icon缓存?[/quote]
rem 关闭Windows外壳程序explorer

taskkill /f /im explorer.exe

rem 清理系统图标缓存数据库

attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"

del /f "%userprofile%\AppData\Local\IconCache.db"

attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"

del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"

rem 清理 系统托盘记忆的图标

echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream

rem 重启Windows外壳程序explorer

start explorer
将上面的保存为 rebuild.bat ,把所有的相关的文件啊,项目先关闭,然后双击这么 rebuild.bat 便可
fhw217 2015-06-18
  • 打赏
  • 举报
回复
解决了,调用CImageList的SetBkColor函数,这种方法的缺点是只适用于CListCtrl控件背景色为单色的情况。

	CImageList imgList;
	imgList.Create(256, 256, ILC_COLOR32, 1, 1);

	imgList.SetBkColor(GetSysColor(COLOR_WINDOW));

	HICON hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	imgList.Add(hIcon);

	m_ctlList.SetImageList(&imgList, LVSIL_NORMAL);
	imgList.Detach();
	
	m_ctlList.InsertItem(0, _T("fan"), 0);
fhw217 2015-06-17
  • 打赏
  • 举报
回复
引用 4 楼 SB_casey 的回复:
这个是缩放造成的,用至少是24*24 以上的ICO图片,最后刷一遍 icon 缓存就OK
请问如何刷Icon缓存?
turbo_casey 2015-06-17
  • 打赏
  • 举报
回复
这个是缩放造成的,用至少是24*24 以上的ICO图片,最后刷一遍 icon 缓存就OK
zgl7903 2015-06-17
  • 打赏
  • 举报
回复
图像好像是被缩放过了 LoadIcon 加载的是系统默认大小的图标(好像是16×16的), 用LoadImage加载和你ImageList大小匹配的图标试试看
处处留心 2015-06-17
  • 打赏
  • 举报
回复
碰到过毛边情况,打错字了,不好意思
处处留心 2015-06-17
  • 打赏
  • 举报
回复
换其他格式的图片试试,我之前也恶婆娘跟到过毛边的情况,最后无奈用了bmp

15,979

社区成员

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

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