VC Listview 在Release版本下无法动态改变图标的解决方法
2009-12-12 14:41
543 查看
VC Listview(list Control) 在Release版本下无法动态改变图标的解决方法
首先我们可以一个小例子说明
ImgList.Create(16, 16, ILC_COLOR24, 0, 0);
CBitmap bitmap_ok, bitmap_err;
bitmap_ok.LoadBitmap(IDB_OK);
bitmap_err.LoadBitmap(IDB_ERR);
ImgList.Add(&bitmap_ok, (CBitmap *)NULL);
ImgList.Add(&bitmap_err, (CBitmap *)NULL);
m_list.SetImageList(&ImgList, LVSIL_SMALL);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0, "状态", LVCFMT_CENTER, 40);
m_list.InsertItem(0, "a", 0);
这里是失败的更改代码
LVITEM item;
item.iItem=0;//测试第一行,为图标
item.mask=LVIF_IMAGE|LVIF_TEXT;
item.iImage=0;//图标索引
item.pszText="a";//测文字
if(m_list.SetItem(&item) ) //查看SetItem是否成功
{
AfxMessageBox("OK");
}
else
{
AfxMessageBox("ERROR");
}
如果这样写出来的在debug就是会变色,在release中就是无法动态改变图标,反回值是无效
测试后发现,加上memset(&item,0,sizeof(LVITEM));或item.iSubItem=0;就可以了!
LVITEM item;
//memset(&item,0,sizeof(LVITEM));
item.iItem=0;
//item.iSubItem=0;
item.mask=LVIF_IMAGE|LVIF_TEXT;
item.iImage=1;
item.pszText="b";
if(m_list.SetItem(&item) )
{
AfxMessageBox("OK");
}
else
{
AfxMessageBox("ERROR");
}
以上代码最好加上memset(&item,0,sizeof(LVITEM));,清一下结构体,然后要有指定item.iSubItem值的习惯.
在item.iItem=0;时memset(&item,0,sizeof(LVITEM))和item.iItem=0,只要其一就会正确运行了!
总结:平时我们开发时都是在debug模式下的,在debug模式下除有大量的调试信息也会对一些结构体和对象等变量等少部份进行初始化(估计是为方便调试),但在Release版本不会(估计是为优化速度),就会有一些随机数之类的潜在影响,所以在定义一些结构体和对象时最好手动做一些初始化避免不必要的麻烦!
首先我们可以一个小例子说明
ImgList.Create(16, 16, ILC_COLOR24, 0, 0);
CBitmap bitmap_ok, bitmap_err;
bitmap_ok.LoadBitmap(IDB_OK);
bitmap_err.LoadBitmap(IDB_ERR);
ImgList.Add(&bitmap_ok, (CBitmap *)NULL);
ImgList.Add(&bitmap_err, (CBitmap *)NULL);
m_list.SetImageList(&ImgList, LVSIL_SMALL);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0, "状态", LVCFMT_CENTER, 40);
m_list.InsertItem(0, "a", 0);
这里是失败的更改代码
LVITEM item;
item.iItem=0;//测试第一行,为图标
item.mask=LVIF_IMAGE|LVIF_TEXT;
item.iImage=0;//图标索引
item.pszText="a";//测文字
if(m_list.SetItem(&item) ) //查看SetItem是否成功
{
AfxMessageBox("OK");
}
else
{
AfxMessageBox("ERROR");
}
如果这样写出来的在debug就是会变色,在release中就是无法动态改变图标,反回值是无效
测试后发现,加上memset(&item,0,sizeof(LVITEM));或item.iSubItem=0;就可以了!
LVITEM item;
//memset(&item,0,sizeof(LVITEM));
item.iItem=0;
//item.iSubItem=0;
item.mask=LVIF_IMAGE|LVIF_TEXT;
item.iImage=1;
item.pszText="b";
if(m_list.SetItem(&item) )
{
AfxMessageBox("OK");
}
else
{
AfxMessageBox("ERROR");
}
以上代码最好加上memset(&item,0,sizeof(LVITEM));,清一下结构体,然后要有指定item.iSubItem值的习惯.
在item.iItem=0;时memset(&item,0,sizeof(LVITEM))和item.iItem=0,只要其一就会正确运行了!
总结:平时我们开发时都是在debug模式下的,在debug模式下除有大量的调试信息也会对一些结构体和对象等变量等少部份进行初始化(估计是为方便调试),但在Release版本不会(估计是为优化速度),就会有一些随机数之类的潜在影响,所以在定义一些结构体和对象时最好手动做一些初始化避免不必要的麻烦!
相关文章推荐
- VC Listview 在Release版本下无法动态改变图标的解决方法
- VC调试无法加断点,代码版本不一致的解决方法
- ListViewItem中的图片不能动态改变的解决方法
- 解决:ScrollView嵌套ListView导致无法正确计算ListView的高度之动态加载图片高度常规方法失效。
- visual c 6.0 编写串口程序release版本在非vc电脑上无法运行的解决方法
- visual c 6.0 编写串口程序release版本在非vc电脑上无法运行的解决方法
- VS2015无法新建项目错误及解决方法:无法打开“……/VC?VCWizards/default.vcxproj”因为此版本的应用程序不支持其项目类型(.vcxproj)
- ListViewItem中的图片不能动态改变的解决方法
- Android listview 的 item 点击无效(无法获取焦点)的解决方法
- 自绘MFC List Control列表控件时无法改变表头CHeaderCtrl高度问题的解决方法
- Tortoise SVN常见图标含义及图标无法正常解决方法!
- “无法定位程序输入点CsrVerifyRegion于动态链接库ntdll.dll上。”的原因及解决方法
- 电脑的程序打开方式改了后桌面的其他图标也改变了(解决方法)
- 解决jquery中动态新增的元素节点无法触发事件问题的两种方法
- 关于远程桌面无法启动以及桌面图标无法显示的解决方法.
- ubuntu14.04 server版 安装指定版本docker的方法(解决apt-get install无法安装指定版本docker的问题)
- deepin/Linux的桌面图标点击无法打开软件的解决方法
- vc工程文件无法打开的解决方法
- Listview的onItemClickListener无法响应的解决方法!!!!